Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void eratoImproved(long max){
- long start = System.currentTimeMillis();
- List<Long> invalidated = new ArrayList<>(); // where invalidated numbers will be stored.
- // prepare
- double maxFac = Math.sqrt(max);
- for(long f = 2; f <= maxFac; f++){
- boolean isNew = true;
- for(long l : invalidated){
- if(f % l == 0){
- isNew = false;
- }
- }
- if(isNew) {
- invalidated.add(Math.round(f + 0.0));
- }
- f++;
- }
- ArrayList<Long> primes = new ArrayList<>();
- for(long prime : invalidated){
- primes.add(prime);
- }
- for(long i = 3; i <= max; i += 2){
- boolean v = true;
- for(long s : invalidated){
- if(i % s == 0){
- v = false;
- break;
- }
- }
- if(v){
- primes.add(i);
- if(primes.size() >= 150){
- String s = Math.round(((i + 0.0)/max)*100) + "%: ";
- for(long l : primes){
- s += l + "/";
- }
- System.out.println(s);
- primes.clear();
- }
- }
- i += 2;
- }
- System.out.println("Completed search!");
- String s = "Remaining primes: ";
- for(long l : primes){
- s += l + "/";
- }
- System.out.println(s);
- primes.clear();
- System.out.println("Conducted search in " + (System.currentTimeMillis() - start)/1000 + " seconds.");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement