Advertisement
ksyshshot

Untitled

Oct 30th, 2022
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.57 KB | Source Code | 0 0
  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3.  
  4. public class Main {
  5.     static Scanner scan = new Scanner(System.in);
  6.  
  7.     public static void writeTask(){
  8.         System.out.println("Данная программа находит все натуральные числа, которые можно представить\n" +
  9.                 "в виде произведения двух простых чисел и которые не превосходят введённое\n" +
  10.                 "натуральное число N");
  11.     }
  12.  
  13.     public static int inputNumber () {
  14.         int number = 0;
  15.         final int MAX_NUMBER = 2147483647;
  16.         final int MIN_NUMBER = 2;
  17.         boolean isIncorrect = false;
  18.         do {
  19.             isIncorrect = false;
  20.             System.out.println("Введите натуральное число в диапазоне от " + MIN_NUMBER + " до " + MAX_NUMBER);
  21.             try {
  22.                 number = Byte.parseByte(scan.nextLine());
  23.             }catch (Exception e) {
  24.                 System.out.println("Число введено некорректно. Повторите попытку");
  25.                 isIncorrect = true;
  26.             }
  27.             if ((!isIncorrect) && (number < MIN_NUMBER)) {
  28.                 System.out.println("Введённое число не соответствует диапазону");
  29.                 isIncorrect = true;
  30.             }
  31.         } while (isIncorrect);
  32.         return number;
  33.     }
  34.  
  35.     public static int[] consistencyUpToNumber (int number) {
  36.         int[] array = new int[number - 1];
  37.         int i = 0;
  38.         while (i < number - 1)
  39.         {
  40.             array[i] = i + 2;
  41.             i++;
  42.         }
  43.         return array;
  44.     }
  45.  
  46.     public static int[] arrayOfPrimes(int number) {
  47.         boolean[] isPrime = new boolean[number];
  48.         Arrays.fill(isPrime, true);
  49.         for (int i = 2; i * i < number; i++) {
  50.             if (isPrime[i]) {
  51.                 for (int j = 2 * i; j < number; j += i) {
  52.                     isPrime[j] = false;
  53.                 }
  54.             }
  55.         }
  56.         int[] primeNumbers = new int[number - 1];
  57.         int j = 0;
  58.         for (int i = 2; i < number; i++) {
  59.             if (isPrime[i]) {
  60.                 primeNumbers[j] = i;
  61.                 j++;
  62.             }
  63.         }
  64.         return primeNumbers;
  65.     }
  66.  
  67.     public static int secondDivision(int arrNumbersElement, int quotient, int number)
  68.     {
  69.         int[] arrOfPrimes = arrayOfPrimes(number);
  70.         int arrCorrectnessElement = 0;
  71.         int k = 0;
  72.         while ((k < 18) && (arrOfPrimes[k] <= quotient))
  73.         {
  74.             if (quotient == arrOfPrimes[k])
  75.             {
  76.                 arrCorrectnessElement = arrNumbersElement;
  77.                 k = 18;
  78.             }
  79.             k++;
  80.         }
  81.         return arrCorrectnessElement;
  82.     }
  83.  
  84.     public static int[] findingRequiredNumbers (int number) {
  85.         int[] arrOfPrimes = arrayOfPrimes(number);
  86.         int[] arrNumbers = consistencyUpToNumber(number);
  87.         number--;
  88.         int[] arrCorrectness = new int[number];
  89.         for (int i = 0; i < number; i++) {
  90.             arrCorrectness[i] = 0;
  91.             int k = 0;
  92.             while ((k < 18) && (arrOfPrimes[k] < arrNumbers[i]))
  93.             {
  94.                 if (arrNumbers[i] % arrOfPrimes[k] == 0)
  95.                 {
  96.                     int quotient = arrNumbers[i] / arrOfPrimes[k];
  97.                     arrCorrectness[i] = secondDivision(arrNumbers[i], quotient, number);
  98.                     k = 18;
  99.                 }
  100.                 k++;
  101.             }
  102.         }
  103.         return arrCorrectness;
  104.     }
  105.  
  106.     public static void outputNumbers (int number, int[] arrCorrect) {
  107.         System.out.println("Полученные натуральные числа:");
  108.         int[] arrNumbers = consistencyUpToNumber(number);
  109.         number--;
  110.         int zeroValue = number;
  111.         for (int i = 0; i < number; i++)
  112.         {
  113.             if (arrCorrect[i] != 0)
  114.             {
  115.                 System.out.print(arrCorrect[i] + " ");
  116.                 zeroValue++;
  117.             }
  118.         }
  119.         if (zeroValue == number)
  120.         {
  121.             System.out.println("Натуральные числа, соответствующие требованиям, не найдены");
  122.         }
  123.     }
  124.     public static void main (String[] args) {
  125.         writeTask();
  126.         int numb = inputNumber();
  127.         scan.close();
  128.         int[] arrayOfCorrect = findingRequiredNumbers(numb);
  129.         outputNumbers(numb, arrayOfCorrect);
  130.     }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement