求素数的程序

朽木可雕 2010-01-29 06:09:03
/*为什么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));
}
}

test()代码循环的次数比main()少了为什么还没main()的运行时间少啊?
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
朽木可雕 2010-02-15
  • 打赏
  • 举报
回复
别沉了。。。。。。。。。
朽木可雕 2010-02-14
  • 打赏
  • 举报
回复
引用 6 楼 bobo364 的回复:
Java codewhile(i* i<= n){if(b.get(i)){
count++;int k=2* i;while(k<= n){
b.clear();
k+= i;
}
}

main中也有嵌套循环,线程貌似有优先级的吧,可能是编译器分配线程的问题,与有多少循环无关

我把主函数中的程序做成静态函数在主函数中调用也是主函数中的运行的比较快
bobo364 2010-02-14
  • 打赏
  • 举报
回复
 while(i * i <= n){
if(b.get(i)){
count ++;
int k = 2* i;
while(k <= n){
b.clear();
k += i;
}
}


main中也有嵌套循环,线程貌似有优先级的吧,可能是编译器分配线程的问题,与有多少循环无关
朽木可雕 2010-02-14
  • 打赏
  • 举报
回复
引用 3 楼 yandefa 的回复:
BitSet bs = new BitSet(n+1);//还有这里 while( i * i <= n ){ int k = 2 * i; while(k <= n) {

两个循环啊

改过来了也没有main中运行的那个快。。我给main中的弄成静态方法在调用都不可以。。还是main方法中那个运行的比较快
java1109 2010-01-29
  • 打赏
  • 举报
回复
3楼正解
alpha 2010-01-29
  • 打赏
  • 举报
回复

BitSet bs = new BitSet(n+1);//还有这里


while( i * i <= n ){

int k = 2 * i;

while(k <= n) {


两个循环啊
朽木可雕 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lrbyantai 的回复:]
mai()是主程序入口,没有它你怎么运行test()?

你没有看到在main()的最后是调用的test()吗?
[/Quote]
你有没有好好看我的代码阿
没看我在每个方法中都有
currentTimeMillis();么
每个方法的时间都是另算的....晕
蛋黄车 2010-01-29
  • 打赏
  • 举报
回复
mai()是主程序入口,没有它你怎么运行test()?

你没有看到在main()的最后是调用的test()吗?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧