C语言,求1000以内素数的和!

2024-11-18 18:35:16
推荐回答(4个)
回答1:

#include
void main()
{
 int n,s=0,sum=0,flag=1,x;//flag没有初始值
 for(n=2;n<=1000;n++)
 { 
  for(x=2;x<=n-1;x++)
  {  //最好用括号括起来
   if(n%x==0)
   {
    flag=0;
    break;      //能整除就可以中止内层循环了
   }
   else
    flag=1;
  }//最好用括号括起来
  if(flag==1)//这儿是判断==,不是赋值
  {
   s++;
   sum=sum+n;
  }

 }  
 printf("sum=%d\ns=%d\n",sum,s);
}

回答2:

逻辑问题···
1:你的if··else完全不符合规范··内层循环建议你用大括号括起来·不管是不是只运行一行代码··
2:内层循环不断的在遍历直到最后一个数··flag也在循环里不断的改变值·不仅耗时而且会出逻辑错误··比方说非素数6·你循环2到5··最终5还是走的else·你岂不是flag仍然为真·最后将非素数也加进去了么·

建议:内层循环你需要达到的目的是通过遍历判断能否被整除,所以你应该只设置一个判断如果能被整除标志位flag为0··马上break出来··不再循环·

希望能对你有帮助

回答3:

#include
void main() {
int n, s = 0, sum = 0, flag, x;
for (n = 2; n <= 1000; n++) {
flag = 1; // 假设每个数刚开始都是素数,用你的方法,2不是素数。
for (x = 2; x <= n - 1; x++)
if (n % x == 0){
flag = 0;
break; //如果不是素数马上退出
}
//else
//flag = 1;
if (flag == 1) { //= 改为 ==
s++;
sum = sum + n;
printf("%d\n",n);
}
}
printf("sum=%d\ns=%d\n", sum, s);
}

回答4:

首先 你2就没有算进去 n=2的时候 x也是2 循环进不去 flag是0 就不加2了