Zliczanie liczb pierwszych

Zliczanie liczb pierwszych

Program: wczytujący liczby z pliku „liczby_pierwsze.txt” po czym zlicza ilość liczb pierwszych i zapisuje je w pliku „output.txt”.

Wykorzystane dane wejściowe:

12
237
32
62
1
2
7
23
49

Dane wyjściowe:

1
49
Znaleziono 2 liczb pierwszych.

Kompilator: Eclipse

Kod programu:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class glowna {
	//Program wczytujący dane z pliku oraz zliczający ilość liczb 
        //pierwszych po czym zapisuje do drugiego pliku.
       public static boolean pierwsza(long n){
          if(n%2==0) 
        	  if(n==2) return true;
        	  else return false;
          for(int i=3;i<=Math.sqrt(n);i+=2){
             if(n%i==0) return false;
          }
          return true;
       }
       public static boolean czyK(long n){
          if (Math.sqrt(n)!=(long)Math.sqrt(n)) return false;
          long k=(long) Math.sqrt(n);
          if (pierwsza(k)) return true;
          else return false;
       }
       public static void main(String[] args) {
          try{
        	 File pliki = new File("output.txt");
      		 pliki.createNewFile();
             FileReader we = new FileReader("liczby_pierwsze.txt");
             BufferedReader buforWe = new BufferedReader(we);
             FileWriter wy = new FileWriter("output.txt");
             BufferedWriter buforWy = new BufferedWriter(wy);
             String linia;
             int ile=0;
             while((linia = buforWe.readLine())!=null){
                if(czyK(Long.parseLong(linia))){
                   buforWy.write(linia);
                   buforWy.newLine();
                   ile++;
                }
             }
             buforWy.write("Znaleziono "+ile+" liczb pierwszych.");
             buforWy.close();
             buforWe.close();
          }catch(IOException ex){
             System.out.print("Błąd: "+ex);
          }
       }
    }

Słowniczek pojęć:

Liczba naturalna, która ma dokładnie dwa dzielniki naturalne: jedynkę i siebie samą, np. 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, tp.