Advertisement
Guest User

DotnetPrimeNumbers

a guest
Dec 15th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.99 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Threading.Channels;
  5.  
  6. namespace DataStructuresAlgorithms.ParallelCourseWork
  7. {
  8.     public class Parallel
  9.     {
  10.         public static bool IsPrime(int number)
  11.         {
  12.             const int threadCount = 4;
  13.             var threads = new Thread[threadCount];
  14.             var parameters = new Parameters[threadCount];
  15.  
  16.             var square = (int) Math.Sqrt(number);
  17.             var intervalWidth = (square - 2) / threadCount;
  18.            
  19.             for (var i = 0; i < threadCount; i++)
  20.             {
  21.                 var threadStart = new ParameterizedThreadStart(Routine);
  22.                 parameters[i] = new Parameters
  23.                 {
  24.                     Start = i == 0 ? 2 : intervalWidth * i,
  25.                     End = intervalWidth * (i + 1),
  26.                     Number = number
  27.                 };
  28.                
  29.                 threads[i] = new Thread(threadStart);
  30.                 threads[i].Start(parameters[i]);
  31.             }
  32.            
  33.             foreach (var thread in threads)
  34.             {
  35.                 thread.Join();
  36.             }
  37.  
  38.             var result = parameters.Aggregate((bool?) null, (current, parameter) => current == null ? parameter.Result : current.Value && parameter.Result.Value);
  39.  
  40.             return result.Value;
  41.         }
  42.  
  43.         private static void Routine(object parameters)
  44.         {
  45.             var p = parameters as Parameters;
  46.             var d = p.Start;
  47.  
  48.             while (d <= p.End)
  49.             {
  50.                 if (p.Number % d == 0)
  51.                 {
  52.                     p.Result = false;
  53.                     return;
  54.                 }
  55.  
  56.                 d++;
  57.             }
  58.  
  59.             p.Result = true;
  60.         }
  61.  
  62.         public class Parameters
  63.         {
  64.             public int Start { get; set; }
  65.             public int End { get; set; }
  66.             public int Number { get; set; }
  67.             public bool? Result { get; set; }
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement