public static int[] FindAllPrimesUnder(int n) { if (n <= 1024) { throw new Exception("Input too small to compuate in parallel."); } ComputeNode rootNode = new ComputeNode(2, n); var listOftasks = new Queue <Task <SortedSet <int> > >(); rootNode.AddAllLeafTasks(listOftasks); Console.WriteLine($"List of Tasks count: {listOftasks.Count}"); var taskRunner = new BagBasedTaskRunner <SortedSet <int> >(listOftasks); taskRunner.RunParallel(); List <int> primes = new List <int>(); foreach (SortedSet <int> batch in taskRunner.results_) { foreach (int prime in batch) { primes.Add(prime); } } primes.Sort(); return(primes.ToArray()); }
/// <summary> /// Branch all the way until base tasks /// * Branching must be symmetrical. /// </summary> protected void Branch() { if (_end - _start >= ComputeNode.BaseTaskSize) { int mid = (_start + _end) / 2; _left = new ComputeNode(_start, mid); _right = new ComputeNode(mid, _end); } // Base task, leaf node, do nothing. }
static void Main(string[] args) { Console.WriteLine("Hello World!"); int n = 0b1_00000_00000_00000_00000_00000_00000; int[] primes = ComputeNode.FindAllPrimesUnder(n); StringBuilder sb = new StringBuilder(); foreach (int I in primes) { sb.Append($"{I},"); } using (StreamWriter sw = new StreamWriter("Prime Number.txt")) { sw.Write(sb.ToString()); } Console.WriteLine(sb.ToString()); }