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

#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;
}

没什么区别,只不过用k<i-1每个循环可以少做一次判断而已,效率看似稍微高点而已,实际当i足够大时,这点提升可以忽略不计
更高效的循环条件应该是k*k<=i
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-05
每个正数都可以被自己整除 。。。。。。。。。。。追问

被被自己整除我知道。。。。那是写成<=i-1。代码里是<i-1。

追答

你输入一些数,去验证一下呗,,,,,,抄的代码,未必是100%正确,这个是正常的情况。。。。。。。

事实 上,<sqrt(i) 都是可以的了。。。。。。。。。。。。。。

追问

好的,谢谢!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网