deced

Untitled

Oct 26th, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.18 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. public class Main {
  5.     static boolean isMersennePrime(int mersennePrime, int exponent) {
  6.         boolean isPrime = false;
  7.         long s = 4;
  8.         for (int i = 2; i < exponent; i++) {
  9.             s = ((s * s) - 2) % mersennePrime;
  10.         }
  11.         if ((s == 0) || (mersennePrime == 3)) {
  12.             isPrime = true;
  13.         }
  14.         return isPrime;
  15.     }
  16.  
  17.     static long getN() {
  18.         Scanner scanner = new Scanner(System.in);
  19.         boolean isIncorrect;
  20.         long ret = 0;
  21.         String inputLine;
  22.         do {
  23.             isIncorrect = false;
  24.             System.out.println("Введите N");
  25.             inputLine = scanner.nextLine();
  26.             try {
  27.                 ret = Long.parseLong(inputLine);
  28.             } catch (Exception ex) {
  29.                 System.err.println("N должно быть положительным числом меньшим 4294967295");
  30.                 isIncorrect = true;
  31.             }
  32.             if (((ret < 1) || (ret > 4294967295L)) && !isIncorrect) {
  33.                 System.err.println("N должно быть положительным числом меньшим 4294967295");
  34.                 isIncorrect = true;
  35.             }
  36.         } while (isIncorrect);
  37.         return ret;
  38.     }
  39.  
  40.     static void printArray(ArrayList<Integer> arrayToPrint) {
  41.         System.out.println("Числа мерсена равны");
  42.         for (int i = 0; i < arrayToPrint.size(); i++) {
  43.             System.out.println(arrayToPrint.get(i));
  44.         }
  45.     }
  46.  
  47.     static ArrayList<Integer> getPrimes() {
  48.         byte p = 32;
  49.         ArrayList<Integer> primes = new ArrayList<Integer>();
  50.         for (int i = 0; i < p; i++)
  51.             primes.add(i + 1);
  52.         for (int i = 1; i < primes.size(); i++)
  53.             if (primes.get(i) != 0)
  54.                 for (int j = i + 1; j < primes.size(); j++)
  55.                     if (primes.get(j) % primes.get(i) == 0)
  56.                         primes.remove(j);
  57.         return primes;
  58.  
  59.     }
  60.  
  61.     static void GetMersennePrimes() {
  62.         long n;
  63.         int mersennePrime;
  64.         n = getN();
  65.         ArrayList<Integer> primes = getPrimes();
  66.         ArrayList<Integer> mersennePrimes = new ArrayList<Integer>();
  67.         for (int i = 0; i < primes.size(); i++) {
  68.             mersennePrime = (1 << primes.get(i)) - 1;
  69.             if (isMersennePrime(mersennePrime, primes.get(i)) && n > mersennePrime) {
  70.                 mersennePrimes.add(mersennePrime);
  71.             }
  72.         }
  73.         printArray(mersennePrimes);
  74.     }
  75.  
  76.     public static void main(String[] args) {
  77.         GetMersennePrimes();
  78.     }
  79.  
  80. }
  81.  
Add Comment
Please, Sign In to add comment