Advertisement
ksyshshot

Untitled

Oct 30th, 2022
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.22 KB | Source Code | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void writeTask()
  6. {
  7.     cout << "Данная программа находит все натуральные числа, которые можно представить в виде произведения двух простых чисел и которые не превосходят введённое натуральное число N\n";
  8. }
  9.  
  10. int inputNumber()
  11. {
  12.     const int MIN_NUMBER = 2;
  13.     const int MAX_NUMBER = 2147483647;
  14.     bool isIncorrect;
  15.     int number;
  16.     do
  17.     {
  18.         isIncorrect = false;
  19.         cout << "Введите натурально число N в диапазоне от " << MIN_NUMBER << " до " << MAX_NUMBER << endl;
  20.         cin >> number;
  21.         if (cin.fail())
  22.         {
  23.             cin.clear();
  24.             while (cin.get() != '\n');
  25.             cout << "Введены некорректные данные\n";
  26.             isIncorrect = true;
  27.         }
  28.         if ((!isIncorrect) && (cin.get() != '\n'))
  29.         {
  30.             cin.clear();
  31.             while (cin.get() != '\n');
  32.             cout << "Введены некорректные данные\n";
  33.             isIncorrect = true;
  34.         }
  35.         if ((!isIncorrect) && ((number > MAX_NUMBER) || (number < MIN_NUMBER)))
  36.         {
  37.             cout << "Неправильный диапазон данных\n";
  38.             isIncorrect = true;
  39.         }
  40.     } while (isIncorrect);
  41.     return number;
  42. }
  43.  
  44. int* ConsistencyUpToNumber(int number)
  45. {
  46.     int* arrayInt = new int[number - 1];
  47.     int i = 0;
  48.     while (i < number - 1)
  49.     {
  50.         arrayInt[i] = i + 2;
  51.         i++;
  52.     }
  53.     return arrayInt;
  54. }
  55.  
  56. int* arrayOfPrimes(int number)
  57. {
  58.     bool* isPrime = new bool[number];
  59.     for (int i = 2; i * i < number; i++)
  60.     {
  61.         if (isPrime[i])
  62.         {
  63.             for (int j = 2 * i; j < number; j += i)
  64.             {
  65.                 isPrime[j] = false;
  66.             }
  67.         }
  68.     }
  69.     int* primeNumbers = new int[number - 1];
  70.     int j = 0;
  71.     for (int i = 2; i < number; i++)
  72.     {
  73.         if (isPrime[i])
  74.         {
  75.             primeNumbers[j] = i;
  76.             j++;
  77.         }
  78.     }
  79.     delete[] isPrime;
  80.     return primeNumbers;
  81. }
  82.  
  83. int SecondDivision(int arrNumbersElement, int quotient, int number)
  84. {
  85.     int* arrOfPrimes = arrayOfPrimes(number);
  86.     int arrCorrectnessElement = 0;
  87.     int k = 0;
  88.     while ((k < number) && (arrOfPrimes[k] != 0) && (arrOfPrimes[k] <= quotient))
  89.     {
  90.         if (quotient == arrOfPrimes[k])
  91.         {
  92.             arrCorrectnessElement = arrNumbersElement;
  93.             k = number;
  94.         }
  95.         k++;
  96.     }
  97.     delete[] arrOfPrimes;
  98.     return arrCorrectnessElement;
  99. }
  100.  
  101. int* findingRequiredNumbers(int number)
  102. {
  103.     int* arrOfPrimes = arrayOfPrimes(number);
  104.     int* arrNumbers = ConsistencyUpToNumber(number);
  105.     number--;
  106.     int* arrCorrectness = new int[number];
  107.     for (int i = 0; i < number; i++)
  108.     {
  109.         arrCorrectness[i] = 0;
  110.         int k = 0;
  111.         while ((k < number) && (arrOfPrimes[k] != 0) && (arrOfPrimes[k] < arrNumbers[i]))
  112.         {
  113.             if (arrNumbers[i] % arrOfPrimes[k] == 0)
  114.             {
  115.                 int quotient = arrNumbers[i] / arrOfPrimes[k];
  116.                 arrCorrectness[i] = SecondDivision(arrNumbers[i], quotient, number);
  117.                 k = number;
  118.             }
  119.             k++;
  120.         }
  121.     }
  122.     delete[] arrOfPrimes;
  123.     delete[] arrNumbers;
  124.     return arrCorrectness;
  125. }
  126.  
  127. void outputNumber(int number, int* arrCorrect)
  128. {
  129.     cout << "Полученные натуральные числа: \n";
  130.     number--;
  131.     int zeroValue = number;
  132.     for (int i = 0; i < number; i++)
  133.     {
  134.         if (arrCorrect[i] != 0)
  135.         {
  136.             cout << arrCorrect[i] << " ";
  137.             zeroValue++;
  138.         }
  139.     }
  140.     if (zeroValue == number)
  141.     {
  142.         cout << "Натуральные числа, соответствующие требованиям, не найдены\n";
  143.     }
  144. }
  145.  
  146. int main()
  147. {
  148.     setlocale(LC_ALL, "Rus");
  149.     writeTask();
  150.     int n = inputNumber();
  151.     int* arrayOfCorrect = findingRequiredNumbers(n);
  152.     outputNumber(n, arrayOfCorrect);
  153.     delete[] arrayOfCorrect;
  154.     return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement