コード例 #1
0
ファイル: Program.cs プロジェクト: Argiziont/PrjModule19
        private static Task[] Task2(ConcurrentDictionary <int, long> testedArray)
        {
            var testedThreadArray = new List <Task>();

            ThreadPool.SetMaxThreads(testedArray.Count / 10, testedArray.Count / 10);

            var rng     = new Random();
            var indexes = new HashSet <int>();

            while (indexes.Count < testedArray.Count)
            {
                indexes.Add(rng.Next(0, testedArray.Count));
            }

            for (var i = 0; i < testedArray.Count; i++)
            {
                var i1      = i;
                var subTask = new Task((() =>
                {
                    if (!testedArray.TryRemove(indexes.ToArray()[i1], out var number))
                    {
                        return;
                    }
                    Console.WriteLine(PrimeTester.IsPrime(number)
                        ? $"{number} is prime"
                        : $"{number} isn't prime");
                }));
                subTask.Start();
                testedThreadArray.Add(subTask);
            }
            return(testedThreadArray.ToArray());
        }
コード例 #2
0
        public void sPrime_ReturnsTrue_InputIsPrime()
        {
            // Arrange
            var primeNumber = 3;

            // Act
            var result = PrimeTester.IsPrime(primeNumber);

            // Assert
            Assert.True(result);
        }
コード例 #3
0
        public void IsPrime_ReturnsFalse_InputIsComposite()
        {
            // Arrange
            var compositeNumber = 9;

            // Act
            var result = PrimeTester.IsPrime(compositeNumber);

            // Assert
            Assert.False(result);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: Argiziont/PrjModule19
        private static Task[] Task1(ConcurrentDictionary <int, long> testedArray)
        {
            var parts        = testedArray.Count / 10;
            var splitedLists = SplitList(testedArray.ToList(), parts);


            return(splitedLists.Select(partedList => Task.Factory.StartNew((() =>
            {
                foreach (var(_, value) in partedList)
                {
                    Console.WriteLine(PrimeTester.IsPrime(value)
                        ? $"{value} is prime"
                        : $"{value} isn't prime");
                }
            }))).ToArray());
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: Argiziont/PrjModule19
        private static void Main()
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var formedArray = PrimeTester.FormArray(0, 10);

            Task.WaitAll(Task1(formedArray));
            stopwatch.Stop();
            Console.WriteLine($"\nTask 1 taken {stopwatch.ElapsedMilliseconds} ms\n");

            stopwatch.Start();
            formedArray = PrimeTester.FormArray(0, 10);
            Task.WaitAll(Task2(formedArray));
            stopwatch.Stop();
            Console.WriteLine($"\nTask 2 taken {stopwatch.ElapsedMilliseconds} ms\n");
        }
コード例 #6
0
        static void Main(string[] args)
        {
            int iterations = 1000;

            BigInteger[] testPrimes =
            {
                2,           3,      5,      7,     11,     13,     17,     19,     23,     29,
                31,         37,     41,     43,     47,     53,     59,     61,     67,     71,
                104549, 104551, 104561, 104579, 104593, 104597, 104623, 104639, 104651, 104659,
                104677, 104681, 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729
            };

            long[] compositeNumbers =
            {
                4,     6,   8,   9,  10,  12,  14,  15,  16,  18,  20,  21,  22,  24,  25,  26,  27,  28,  30,  32,  33,  34,  35,  36,  38, 39, 40,
                42,   44,  45,  46,  48,  49,  50,  51,  52,  54,  55,  56,  57,  58,  60,  62,  63,  64,  65,  66,  68,  69,  70,  72,  74, 75,
                76,   77,  78,  80,  81,  82,  84,  85,  86,  87,  88,  90,  91,  92,  93,  94,  95,  96,  98,  99, 100, 102, 104, 105, 106,
                108, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 130, 132,
                133, 134, 135, 136, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150
            };

            Console.WriteLine("Test primes:");
            Parallel.ForEach(testPrimes, testPrime =>
            {
                var primeChecker = new PrimeTester();
                Console.WriteLine(
                    $"Is {testPrime} is a prime: {primeChecker.CheckPrimeBySolovayStrassenTest(testPrime, iterations)}");
            });

            Console.WriteLine("Test composite number:");
            Parallel.ForEach(compositeNumbers, compositeNumber =>
            {
                var primeChecker = new PrimeTester();
                Console.WriteLine(
                    $"Is {compositeNumber} is a composite number: {!primeChecker.CheckPrimeBySolovayStrassenTest(compositeNumber, iterations)}");
                Console.Out.Flush();
            });

            Console.ReadLine();
        }
コード例 #7
0
 public void Prime_Smoke_Test()
 {
     Assert.IsTrue(PrimeTester.IsPrime(11));
     Assert.IsFalse(PrimeTester.IsPrime(50));
     Assert.IsTrue(PrimeTester.IsPrime(101));
 }