Advertisement
DjSapsan

PrimesJava

Jul 26th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.10 KB | None | 0 0
  1. package com.arsen.prime;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.ArrayList;
  6.  
  7. public class Prime {
  8.     public static final int[] PRIME_ARRAY16 = generatePrimeArray16();
  9.    
  10.     //private static ArrayList<Integer> PrimeList16 = new ArrayList<>();
  11.    
  12.     private static int[] generatePrimeArray16() {
  13.         System.out.println("generating array of 65536 primes...");
  14.         double startT = System.currentTimeMillis();
  15.         int[] list = new int[65536];
  16.         list[0] = 2;
  17.         list[1] = 3;
  18.        
  19.         int nextGuess;
  20.        
  21.         for(int i=2; i<65536;i++) {                 // для всех ячеек в списке
  22.             nextGuess = list[i-1];
  23.             do {                                    // цикл
  24.                 nextGuess +=2;                      //  следующее возможное число = предыдущее + 2
  25.             }while(! isPrimeBrute(nextGuess,list));     // повторять пока это не простое число
  26.             list[i] = nextGuess;                    // найденное число записать в список
  27.             //if (i%1000==0) System.out.printf("%d numbers was generated\n",i);
  28.         }
  29.         double elapsedT = System.currentTimeMillis() - startT;
  30.         System.out.printf("array of 65536 primes was generated in %.3f seconds\n", elapsedT/1000);
  31.         return list;
  32.     }
  33.    
  34.     public static boolean isPrimeBrute(int n) {
  35.         if (n%2==0 | n<2) return false;
  36.         if (n==2) return true;
  37.         for(int div=3;div<=Math.sqrt(n); div+=2) {
  38.             if (n%div==0) return false;
  39.         }
  40.         return true;
  41.     }
  42.    
  43.     /*
  44.      * private static void genderatePrimeList16() {
  45.      * System.out.println("generating list of 65536 primes..."); double startT =
  46.      * System.currentTimeMillis(); PrimeList16.add(2); PrimeList16.add(3);
  47.      *
  48.      * int nextGuess;
  49.      *
  50.      * for(int i=2; i<65536;i++) { // для всех ячеек в списке nextGuess =
  51.      * PrimeList16.get(i-1); do { // цикл nextGuess +=2; // следующее возможное
  52.      * число = предыдущее + 2 }while(! isPrimeFast(nextGuess)); // повторять пока
  53.      * это не простое число PrimeList16.add(nextGuess); // найденное число записать
  54.      * в список //if (i%1000==0) System.out.printf("%d numbers was generated\n",i);
  55.      * } double elapsedT = System.currentTimeMillis() - startT;
  56.      * System.out.printf("list of 65536 primes was generated in %.3f seconds\n",
  57.      * elapsedT/1000); }
  58.      */
  59.    
  60.     private static boolean isPrimeFast(int n, int[] list) {
  61.         if (n<2) return false;
  62.         if (n==2) return true;
  63.         for(int i=0; ;i++) {                // цикл перебора существующих простых делителей
  64.             if(n% list[i]==0)return false;
  65.             if()
  66.         }
  67.         return true;
  68.     }
  69.    
  70.     public static void printToFIleFormated(int[] array) throws IOException {
  71.         PrintWriter writer = new PrintWriter (new FileWriter("primes.txt"));
  72.        
  73.         int l = Prime.PRIME_ARRAY16.length;
  74.         for(int i=0; i<l; i++) {
  75.             int n = Prime.PRIME_ARRAY16[i];
  76.             writer.printf("%8d",n);
  77.             if(i%20==0) writer.printf("\n");
  78.         }
  79.         writer.close();
  80.     }
  81.    
  82.     public static int getPrimeFromList(int n) {
  83.         if(PrimeList16.isEmpty()) genderatePrimeList16();
  84.         return PrimeList16.get(n);
  85.     }
  86.    
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement