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等は公式を見てください。