求比任一数小的所有素数算法
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?