public static void Main() { Console.WriteLine("Prime numbers: ".Length); var len = 1000000; var primes = Primes.AddPrimes(len); Console.Write(primes); }
private void ConsolidatePrimes(List <Primes> morePrimes) { var threads = morePrimes.Count; var tasks = new Task[threads]; var count = primes.Count; primes.Count = count + morePrimes.Sum(item => item.Count); for (var thread = 0; thread < threads; thread++) { var taskPrimes = morePrimes[thread]; var start = count; tasks[thread] = Task.Factory.StartNew(() => primes.AddPrimes(taskPrimes, start)); count += taskPrimes.Count; } Task.WaitAll(tasks); }
private void ProcessRange(Primes primes, bool[] block, long kstart, long kend, int blockSize) { var offsets = new int[numberOfDivisors]; var cycleOffset = cycleSize - (int)(kstart % cycleSize); cycleOffset = (cycleOffset + (((cycleOffset & 1) - 1) & cycleSize)) >> 1; offsets[0] = cycleOffset; for (var i = 1; i < numberOfDivisors; i++) { var d = divisors[i]; var offset = d - (uint)(kstart % d); offset = (offset + (((offset & 1) - 1) & d)) >> 1; offsets[i] = (int)offset; } for (var k = kstart; k < kend; k += blockSize) { var length = (int)Math.Min(blockSize, kend - k); SieveBlock((uint)k, length, block, offsets); primes.AddPrimes((uint)k, length, block); } }