Advertisement
Guest User

Calculador.java

a guest
Sep 4th, 2011
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.19 KB | None | 0 0
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.util.AbstractList;
  9. import java.util.ArrayList;
  10.  
  11. //Calculador de números primos do Allan Taborda -  Autor: Allan Taborda ds Santos - Licença: GPL 3
  12. public class Calculador{
  13.     private PersistentListOfIntegers primos;
  14.     private int count = 0, max;
  15.    
  16.     public Calculador(){
  17.         primos = new PersistentListOfIntegers("NumerosPrimos.dat");
  18.         if(primos.isEmpty()){
  19.             max = 14;
  20.             primos.add(2);
  21.             primos.add(3);
  22.             primos.add(5);
  23.             primos.add(7);
  24.             primos.add(11);
  25.             primos.add(13);
  26.             primos.add(17);
  27.             primos.add(19);
  28.             primos.add(23);
  29.             primos.add(29);
  30.             for(int n : primos) System.out.println("O numero " + n + " e primo!");
  31.         }else{
  32.             max = (primos.get(primos.size() - 1) - 1) / 2;
  33.         }
  34.         for(int n = primos.get(primos.size() - 1); n < Integer.MAX_VALUE; n = n + 2){
  35.             if(isPrimo(n)){
  36.                 primos.add(n);
  37.                 System.out.println("O numero " + n + " e primo!");
  38.                 if(primos.size() % 100 == 0) System.out.println("Quantidade de numeros primos encontrada: " + primos.size());
  39.                 if(primos.size() == 10000000) primos.finish();
  40.                 if(++count > 9999){
  41.                     count = 0;
  42.                     System.out.print("Salvando...");
  43.                     primos.save();
  44.                     System.out.println("   OK!");
  45.                 }
  46.             }
  47.             max = (n - 1) / 2;
  48.         }
  49.     }
  50.    
  51.     public boolean isPrimo(long n){
  52.         for(int c = 1; c < primos.size(); c++){
  53.             long p = primos.get(c);
  54.             if(p > max) return true;
  55.             if(n % p == 0) return false;
  56.         }
  57.         throw new RuntimeException("Essa linha nunca deveria ser executada!");
  58.     }
  59.    
  60.     public static void main(String[] nerds){
  61.         new Calculador();
  62.     }
  63.    
  64.     private class PersistentListOfIntegers extends AbstractList<Integer>{
  65.         private ArrayList<Integer> ints;
  66.         private final String nome;
  67.        
  68.         public PersistentListOfIntegers(String nome){
  69.             this.nome = nome;
  70.             ints = new ArrayList<Integer>(10000000);
  71.             load();
  72.         }
  73.        
  74.         @Override
  75.         public Integer get(int index){
  76.             return ints.get(index);
  77.         }
  78.  
  79.         @Override
  80.         public int size(){
  81.             return ints.size();
  82.         }
  83.        
  84.         @Override
  85.         public boolean add(Integer n){
  86.             return ints.add(n);
  87.         }
  88.        
  89.         @SuppressWarnings("unchecked")
  90.         public void load(){
  91.             try{
  92.                 File f = new File(nome);
  93.                 if(f.isFile()){
  94.                     ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(f), 1638400));
  95.                     ints = (ArrayList<Integer>) ois.readObject();
  96.                     ois.close();
  97.                 }else{
  98.                     ints = new ArrayList<Integer>(10000000);
  99.                 }
  100.             }catch(Exception e){
  101.                 System.out.println("ZICOU!!!");
  102.                 e.printStackTrace();
  103.                 System.exit(1);
  104.             }
  105.         }
  106.        
  107.         public void save(){
  108.             try{
  109.                 ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File(nome)), 1638400));
  110.                 oos.writeObject(ints);
  111.                 oos.flush();
  112.                 oos.close();
  113.             }catch(Exception e){
  114.                 System.out.println("ZICOU!!!");
  115.                 e.printStackTrace();
  116.                 System.exit(1);
  117.             }
  118.         }
  119.        
  120.         public void finish(){
  121.             save();
  122.             new File(nome).renameTo(new File("Concluido" + nome));
  123.         }
  124.     }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement