62,620
社区成员
发帖
与我相关
我的任务
分享/*为什么main()这个程序的运行时间比test()的要少啊*/
import java.util.*;
public class Test
{
public static void main(String []args){
int n = 2000000;
long start = System.currentTimeMillis();
BitSet b = new BitSet();
int count = 0;
int i = 0;
for(i = 2;i <= n; i++){
b.set(i);
}
i = 2;
while(i * i <= n){
if(b.get(i)){
count ++;
int k = 2* i;
while(k <= n){
b.clear();
k += i;
}
}
i++;
}
while(i <= n){
if(b.get(i))count++;
i++;
}
long end = System.currentTimeMillis();
System.out.println(""+(end-start));
test();
}
public static void test(){
int i = 2;
int n = 2000000;
int count = n;
BitSet bs = new BitSet(n+1);
long timestart = System.currentTimeMillis();
while( i * i <= n ){
int k = 2 * i;
while(k <= n) {
if(bs.get(k) == false) --count;//此处0还没有去除
else {k += i; continue;}
bs.set(k);
k += i;
}
i++;
}
long timeend = System.currentTimeMillis() ;
System.out.println(""+(count-1));//去除0
System.out.println(""+(timeend-timestart));
}
} while(i * i <= n){
if(b.get(i)){
count ++;
int k = 2* i;
while(k <= n){
b.clear();
k += i;
}
}