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;
} 展开
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;
} 展开
2个回答
2016-09-05
展开全部
没什么区别,只不过用k<i-1每个循环可以少做一次判断而已,效率看似稍微高点而已,实际当i足够大时,这点提升可以忽略不计
更高效的循环条件应该是k*k<=i
更高效的循环条件应该是k*k<=i
2016-09-05
展开全部
每个正数都可以被自己整除 。。。。。。。。。。。
更多追问追答
追问
被被自己整除我知道。。。。那是写成<=i-1。代码里是<i-1。
追答
你输入一些数,去验证一下呗,,,,,,抄的代码,未必是100%正确,这个是正常的情况。。。。。。。
事实 上,<sqrt(i) 都是可以的了。。。。。。。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询