Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.AbstractList;
- import java.util.ArrayList;
- //Calculador de números primos do Allan Taborda - Autor: Allan Taborda ds Santos - Licença: GPL 3
- public class Calculador{
- private PersistentListOfIntegers primos;
- private int count = 0, max;
- public Calculador(){
- primos = new PersistentListOfIntegers("NumerosPrimos.dat");
- if(primos.isEmpty()){
- max = 14;
- primos.add(2);
- primos.add(3);
- primos.add(5);
- primos.add(7);
- primos.add(11);
- primos.add(13);
- primos.add(17);
- primos.add(19);
- primos.add(23);
- primos.add(29);
- for(int n : primos) System.out.println("O numero " + n + " e primo!");
- }else{
- max = (primos.get(primos.size() - 1) - 1) / 2;
- }
- for(int n = primos.get(primos.size() - 1); n < Integer.MAX_VALUE; n = n + 2){
- if(isPrimo(n)){
- primos.add(n);
- System.out.println("O numero " + n + " e primo!");
- if(primos.size() % 100 == 0) System.out.println("Quantidade de numeros primos encontrada: " + primos.size());
- if(primos.size() == 10000000) primos.finish();
- if(++count > 9999){
- count = 0;
- System.out.print("Salvando...");
- primos.save();
- System.out.println(" OK!");
- }
- }
- max = (n - 1) / 2;
- }
- }
- public boolean isPrimo(long n){
- for(int c = 1; c < primos.size(); c++){
- long p = primos.get(c);
- if(p > max) return true;
- if(n % p == 0) return false;
- }
- throw new RuntimeException("Essa linha nunca deveria ser executada!");
- }
- public static void main(String[] nerds){
- new Calculador();
- }
- private class PersistentListOfIntegers extends AbstractList<Integer>{
- private ArrayList<Integer> ints;
- private final String nome;
- public PersistentListOfIntegers(String nome){
- this.nome = nome;
- ints = new ArrayList<Integer>(10000000);
- load();
- }
- @Override
- public Integer get(int index){
- return ints.get(index);
- }
- @Override
- public int size(){
- return ints.size();
- }
- @Override
- public boolean add(Integer n){
- return ints.add(n);
- }
- @SuppressWarnings("unchecked")
- public void load(){
- try{
- File f = new File(nome);
- if(f.isFile()){
- ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(f), 1638400));
- ints = (ArrayList<Integer>) ois.readObject();
- ois.close();
- }else{
- ints = new ArrayList<Integer>(10000000);
- }
- }catch(Exception e){
- System.out.println("ZICOU!!!");
- e.printStackTrace();
- System.exit(1);
- }
- }
- public void save(){
- try{
- ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File(nome)), 1638400));
- oos.writeObject(ints);
- oos.flush();
- oos.close();
- }catch(Exception e){
- System.out.println("ZICOU!!!");
- e.printStackTrace();
- System.exit(1);
- }
- }
- public void finish(){
- save();
- new File(nome).renameTo(new File("Concluido" + nome));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement