package org.basic.test;import java.util.arraylist;import java.util.list;public class testprimer { public static void main(string[] args) { int scope = 5000000; system.out.println("scope=" + scope); testprimer tp = new testprimer(); long time1 = system.currenttimemillis(); list<integer> primers1 = tp.getprime1(scope); long time2 = system.currenttimemillis(); list<integer> primers2 = tp.getprime2(scope); long time3 = system.currenttimemillis(); system.out.println("算法一耗时:" + (time2 - time1) + " ms"); system.out.println(primers1.size()); //tp.print(primers1); system.out.println("算法二耗时:" + (time3 - time2) + " ms"); system.out.println(primers2.size()); //tp.print(primers2); } public void print(list<integer> primers){ for(integer i : primers){ system.out.print(i + ", "); } } public list<integer> getprime1(int number) { list<integer> primes = new arraylist<integer>(); primes.add(2); for (int i = 3; i <= number; i++) { if (isprime1(primes, i)) { primes.add(i); } } return primes; } //只要i不能被比i小的所有素数整除i就是素数。 public boolean isprime1(list<integer> primes, int i) { for (int prime : primes) { if(prime * prime > i){ return true; } if (i % prime == 0) { return false; } } return true; } public list<integer> getprime2(int number) { list<integer> primes = new arraylist<integer>(); primes.add(2); for (int i = 3; i <= number; i++) { if (isprime2(i)) { primes.add(i); } } return primes; } public boolean isprime2(int i) { for (int j = 2; j < math.sqrt(i) + 1; j++) { if (i % j == 0) { return false; } } return true; } }scope=5000000算法一耗时:2953 ms348513算法二耗时:7031 ms348513
求比任一数小的所有素数算法
素数生成算法对比
最新推荐文章于 2020-05-16 20:09:03 发布
本文对比了两种不同的素数生成算法。一种算法利用已知素数列表进行判断,另一种算法通过遍历小于根号i的所有整数来判断素性。通过对500万范围内的素数进行计算,展示了两种算法的时间效率和准确性。
1153

被折叠的 条评论
为什么被折叠?



