/// <summary> /// Executes structural data parallelism, chunk partitioning /// </summary> /// <param name="topLimit"></param> /// <returns>Unordered list of prime numbers</returns> public IEnumerable <int> GetAllNumbers(int topLimit) { if (topLimit < PrimeNumber.FIRST_PRIME_NUMBER) { throw new ArgumentException(string.Format(Strings.ArgumentShouldBeNoLessThan, PrimeNumber.FIRST_PRIME_NUMBER)); } var partitioner = Partitioner.Create(PrimeNumber.FIRST_PRIME_NUMBER, topLimit); var lockObject = new object(); var result = new List <int>(); Parallel.ForEach(partitioner, () => new List <int>(), (range, state, localList) => { for (int i = range.Item1; i < range.Item2; i++) { if (_checker.IsPrime(i)) { localList.Add(i); } } return(localList); }, finalResult => { lock (lockObject) result.AddRange(finalResult); }); return(result); }
/// <summary> /// Executes structural data parallelism, range partitioning /// </summary> /// <param name="topLimit"></param> /// <returns>Unordered list of prime numbers</returns> public IEnumerable <int> GetAllNumbers(int topLimit) { if (topLimit < PrimeNumber.FIRST_PRIME_NUMBER) { throw new ArgumentException(string.Format(Strings.ArgumentShouldBeNoLessThan, PrimeNumber.FIRST_PRIME_NUMBER)); } return(ParallelEnumerable.Range(PrimeNumber.FIRST_PRIME_NUMBER, topLimit - PrimeNumber.FIRST_PRIME_NUMBER + 1) .Where(n => _checker.IsPrime(n))); }
public void Execute(List <string> parameters) { if (parameters.Count == 0) { throw new InvalidCommandInputException("Command expects at least 1 parameter."); } CheckParameters(parameters); foreach (var param in parameters) { ulong num = ulong.Parse(param); if (_primeChecker.IsPrime(num)) { Console.WriteLine($"{num} is prime."); } else { Console.WriteLine($"{num} is no prime."); } } }