Advertisement
Guest User

Последовательный (модифицированный)

a guest
Oct 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.38 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading.Tasks;
  4.  
  5. namespace Lab2
  6. {
  7.     class Program
  8.     {
  9.         static bool[] CreateNotSortedListForModified(int N)
  10.         {
  11.             bool[] primeNumbers = new bool[N + 1];
  12.             primeNumbers[2] = true;
  13.             for (int i = 3; i <= N; i += 2)
  14.             {
  15.                 primeNumbers[i] = true;
  16.             }
  17.             return primeNumbers;
  18.         }
  19.  
  20.         static bool[] GetPrimeNumbersModified(int N, bool[] primeNumbers)
  21.         {
  22.             int lenght = primeNumbers.Length / 4;
  23.             int sqrtN = (int)Math.Sqrt(N);
  24.  
  25.             //Находим базовые простые числа, начиная с 3
  26.             for (int i = 3; i < sqrtN; i++)
  27.             {
  28.                 for (int j = i * 3; j < sqrtN; j += i * 2)
  29.                 {
  30.                     primeNumbers[j] = false;
  31.                 }
  32.             }
  33.  
  34.             //Исключаем составные, проходясь по базовым (Вот это говно надо распараллелить. Только модифицированный работает у меня дольше, чем последовательный)
  35.             for (int k = 3; k < lenght; k++)
  36.             {
  37.                 if (primeNumbers[k])
  38.                 {
  39.                     for (int h = sqrtN; h <= N; h++)
  40.                     {
  41.                         if (h % k == 0)
  42.                         {
  43.                             primeNumbers[h] = false;
  44.                         }
  45.                     }
  46.                 }
  47.             }
  48.             return primeNumbers;
  49.         }
  50.  
  51.         static void Show(bool[] primeNumbers)
  52.         {
  53.             for (int i = 0; i < primeNumbers.Length; i++)
  54.             {
  55.                 if (primeNumbers[i] == true)
  56.                 {
  57.                     Console.Write("{0} ", i);
  58.                 }
  59.             }
  60.         }
  61.  
  62.         static void Main(string[] args)
  63.         {
  64.             int N = 1000;
  65.             Stopwatch sw = new Stopwatch();
  66.             sw.Start();
  67.             bool[] primeNumbers = CreateNotSortedListForModified(N);
  68.             bool[] sortedArray = GetPrimeNumbersModified(N, primeNumbers);
  69.             sw.Stop();
  70.             //Show(sortedArray);
  71.             Console.WriteLine(sw.Elapsed.TotalMilliseconds);
  72.             Console.ReadKey();
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement