永发信息网

java筛法求N以内素数个数

答案:1  悬赏:0  手机版
解决时间 2021-01-15 14:48
java筛法求N以内素数个数
最佳答案
prime[k]数组越界了。
没必要搞这么复杂吧。
public class Test{
public static void main(String [] args){
System.out.println("Welcome new world:++"+add(13));
}
public static int add(int n){
int cnt=0;
for(int i=2;i<=n;i++){
boolean flag = false;
for(int j=2;j
if(i%j==0){

flag = true;

}

}

if(!flag){

cnt ++;

}

}
return cnt;

}追问报错就是说越界了啊
你的代码复杂度O(n²)了吧。在我的方案上咋修改,追答public class Test{
public static void main(String [] args){
System.out.println("Welcome new world:++"+add(13));
}
public static int add(int n){
//定义计数器
int cnt=0;
//循环2到n之间的数,1排除,直接从2开始。
for(int i=2;i<=n;i++){
//先假设循环子是素数,定义标记。
boolean flag = false;
//用2到循环子之间的数去除这个循环子。如果能除尽,那该数就不是素数。
for(int j=2;j
if(i%j==0){
//不是素数
flag = true;
}
}
//如果是素数,计数器自加。
if(!flag){
cnt ++;
}
}
return cnt;
}

关键你这一块有什么 意义
for(int k=i*i;k prime[k]=false;

你没有判断该数是否是素数的判断啊。追问把for(int k=i*i;k改成for(int k=i*2;k就对了。这块的意思是去掉素数prime[i]的倍数(去掉合数)。
我想用k=i*i作为起始,是因为k=i*2=2*i,在i=2的时候prime[i*2]已经去掉了,没必要再重复
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
单选题目前我国已建立起全面的行政监督体系。
TO ORDER AND BLANK ENDORSED是什么意思,是
电脑做系统的时候,分区的时候提示本地磁盘c
请问阿基里 斯上单厉害吗?
其实一直想知道这个SPSS和SPSS Clementine是
抓烟机怎么经营
那种长袖衣服有星星图案的衣叫什么
半导体和量子力学之间有什么联系,有人说没有
南水北调的东线、中线都可以到达的城市是
超市冷鲜营销员都干啥活
带木字旁取名字姓薛
干海参的等级都分几级价位分别是多少?
潜江市潜江华昌广告怎么去啊,谁知道地址啊
大伙有没有知道加盟每天惠怎么样的?知道的就
冒菜加什么食用香精粉,隔很远都能闻到的。
推荐资讯
资源与评价清炒小螺蛳阅读答案?
从今天算起,235天以前是几月几日
从ACCA F阶段升级到P,前辈们都有哪些忠告
某一配电盘比其他配电盘电压高
男朋友和前女友偷偷联系该原谅吗
把长辈叫老表吗
请大家一同鉴别高古玉牌,和大家分享古玉变
东风景逸x5和东风风神Ax7哪个好
悦享茶馆地址在哪,我要去那里办事,
解答题阅读下列材料:材料一任何时候我进入教
NBA控卫战术手势详细代表什么
Android 开发中,有哪些坑需要注意
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?