Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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.");
                }
            }
        }