C#でProject Euler(8) Set

Pythonのsetの代替になるコンテナはHashSetとSortedSetがあります。Problem 29の小規模超ナイーブ版で考えてみましょう。Pythonならこんな感じです。

N = 10
s = set(a ** b for a in xrange(2, N + 1) for b in xrange(2, N + 1))
print len(s)

HashSetを使うとこうなります。

using System;
using System.Collections.Generic;
using System.Linq;

class e029 {
    static void print<T>(List<T> v) {
        var a = v.Select(e => e.ToString());
        Console.WriteLine(String.Join(",", a));
    }
    
    static long pow(int n, int e) {
        return e == 0 ? 1L : n * pow(n, e - 1);
    }
    
    static void Main(string[] args) {
        const int   N = 10;
        var s = new HashSet<long>(from a in Enumerable.Range(2, N - 1)
                                  from b in Enumerable.Range(2, N - 1)
                                  select pow(a, b));
        Console.WriteLine(s.Count);
        foreach(var p in s) {
            Console.Write("{0} ", p);   // 4 8 16 32 ...
        }
    }
}

代わりにSortedSetを使うと、

        var s = new SortedSet<long>(from a in Enumerable.Range(2, N - 1)
                                    from b in Enumerable.Range(2, N - 1)
                                    select pow(a, b));
        Console.WriteLine(s.Count);
        foreach(var p in s) {
            Console.Write("{0} ", p);   // 4 8 9 16 ...
        }

適当と思われる方を使ってください。
あと、よく使うと思われるメソッド、Add、Contains等は公式を見てください。