Advertisement
ksyshshot

Untitled

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