Bob103

C++_Prime_Number(Sieve of Eratosthenes)

Jan 22nd, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     setlocale(LC_ALL, "rus");
  8.     int n; // правая граница интервала
  9.     cout << "Введите число - N: ";
  10.     cin >> n;
  11.  
  12.     int size_array = n - 2; // так как первое простое число - это 2, то размер массива уменьшаем на 2, так как 0 и 1 не в счёт    
  13.     int *arrayPtr = new int[size_array]; // создаём одномерный динамический массив размером n - 2
  14.  
  15.     for (int counter = 0; counter <= size_array; counter++)
  16.     {
  17.         arrayPtr[counter] = counter + 2; // записываем в массив все числа в интервале [2;n]
  18.     }
  19.     int p = 2; // первое простое число
  20.     int index = 0; // переменная  для прохода по элементам массива
  21.  
  22.                    // в цикле while реализовано решето Эратосфена
  23.     while (p < n) // пока значение переменной p меньше введённого n
  24.     {
  25.         // в цикле for отсеиваем составные числа
  26.         for (int counter = p*p - 2; counter <= size_array; counter += p)
  27.         {
  28.             arrayPtr[counter] = -1; // на места составных чисел присваиваем значение -1
  29.         }
  30.  
  31.         // в цикле while изменяем значение переменной p
  32.         while (arrayPtr[index] <= p) // пока значение из массива чисел меньше либо равно значению переменной p
  33.         {
  34.             index++; // переключаться на следующий элемент массива
  35.         }
  36.         p = arrayPtr[index]; // нужное значение массива найдено, поэтому присваиваем его переменной p
  37.     } // конец алгоритма Эратосфена
  38.  
  39.       // вывод на экран простых чисел
  40.     for (int counter = 0; counter <= n - 2; counter++)
  41.     {
  42.         if (arrayPtr[counter] != -1) // если элемент массива не равен -1
  43.             cout << setw(2) << arrayPtr[counter] << " "; // сделать вывод на экран
  44.     }
  45.  
  46.     cout << endl;
  47.     system("pause");
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment