#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*k<=i
被被自己整除我知道。。。。那是写成<=i-1。代码里是<i-1。
追答你输入一些数,去验证一下呗,,,,,,抄的代码,未必是100%正确,这个是正常的情况。。。。。。。
事实 上,<sqrt(i) 都是可以的了。。。。。。。。。。。。。。
好的,谢谢!