C语言中,求指定区间的素数数量和素数合这个代码的第十六行为什么要用i-1,求高手解答,代码如下:

#include<stdio.h>intmain(){intm,n;intsum=0;intcnt=0;inti;scanf("%d%d",&m,&n);//m=10,n... #include<stdio.h>

int main()
{
int m,n;
int sum=0;
int cnt=0;
int i;

scanf("%d %d",&m,&n);
//m=10,n=31;
if (m==1) m=2;
for (i=m;i<=n;i++){
int isPrime=1;
int k;
for(k=2;k<i-1;k++){/*这边为什么要用i-1,用i也可以的啊?还没想通为什么要用i-1,不上应该用i的吗*/
isPrime=0;
break;
}
}
if (isPrime){
sum +=i;
cnt++;
}
}
printf("%d %d\n",cnt,sum);

return 0;
}
完整代码如下:
#include<stdio.h>

int main()
{
int m,n;
int sum=0;
int cnt=0;
int i;

scanf("%d %d",&m,&n);
//m=10,n=31;
if (m==1) m=2;
for (i=m;i<=n;i++){
int isPrime=1;
int k;
for(k=2;k<i-1;k++){
if(i%k==0){
isPrime=0;
break;
}
}
if (isPrime){
sum +=i;
cnt++;
}
}
printf("%d %d\n",cnt,sum);

return 0;
}
展开
 我来答
匿名用户
2016-09-05
展开全部
没什么区别,只不过用k<i-1每个循环可以少做一次判断而已,效率看似稍微高点而已,实际当i足够大时,这点提升可以忽略不计
更高效的循环条件应该是k*k<=i
匿名用户
2016-09-05
展开全部
每个正数都可以被自己整除 。。。。。。。。。。。
更多追问追答
追问
被被自己整除我知道。。。。那是写成<=i-1。代码里是<i-1。
追答
你输入一些数,去验证一下呗,,,,,,抄的代码,未必是100%正确,这个是正常的情况。。。。。。。

事实 上,<sqrt(i) 都是可以的了。。。。。。。。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式