#include<stdio.h>
main()
{ int i,j,s;
for(i=2,;i<=100;i++)
{ for(j=2;j<=i-1;j++)
if(i%j==0)break;
if(j>i-1)
s=s+i;
}
printf("%d\n",s);
}
能帮我具体分析下吗?
if(j>i-1)这个判断没搞清楚 没有这个判断 行吗
追答不行啊,if(j>i-1)主要就是区分是正常结束跳出的啊,还是中间break的啊,中间break的说明不是素数的时候跳出的...
追问额,我没搞懂 if(j>i-1)这个判断......为什么是就j>i-1,不能是其他吗?难道是因为上面那个FOR循环里面的j<=i-1?
追答是的。这个for的循环区间[2,i-1], 当j=i时for正常结束跳出。因此你也可以用if(j==i)来判断是否是正常结束跳出的的。
追问if(j>i-1)这句话只是判断是否执行下面的s=s+i吧?我把if(j>i-1)改为else可行吗?
追答是的。不能改为else ,为什么呢?看下面,i第一个if是for循环体中的内容,如果第二个if改为else和那个if配对啊。
for(j=2;ji-1;
{
if(i%j==0)break;//取余为0了,说明i不是素数,跳出循环,不用累加到s中
}
if(j>i-1)//正常结束跳出来的,i是素数,执行下面一句,累加到s,否则什么也不做。
s=s+i;