(c语言)求素数和

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:01:42
求2到10之间的素数和。
这是我写的程序:
#include <stdio.h>
void main()
{int x,n=10,i,s=0;
for(x=3;x<=n;x++)
{for(i=2;i<x;i++)
if(x%i==0)
break;}
s=s+x;
printf("%d\n",s);

}
思路是:一个数(x),若在1和它本身之间找到一个i,使x%i==0,则判断出这个数不是素数,并用break跳出内层循环,否则执行s=s+x。
结果却是:11.不是(3+5+7=)12
若n=11,时我的结果是12,n=12时,我的结果是=13...
请问,s=s+x的位置错在了哪呢?第二个for循环就是判断x是否为素数的,若不是的话就break跳出第二for,用第一个for进行判断下一个数;否则就是素数了,执行s=s+x.感谢您的回答!
5楼说得好像不对,若是都加进去了,不会是12.

#include <stdio.h>
void main()
{
int x,n=10,i,s=0;
for(x=3;x<=n;x++)
{
for(i=2;i<x;i++)
if(x%i==0)
break;

if i == x+1
s=s+x;
}

printf("%d\n",s);

}

你s=s+x; 放的位置不对,应该这样放:

#include <stdio.h>

void main()
{
int x,n=10,i,s=0;

for(x=3;x<=n;x++)
{
for(i=2;i<x;i++)
if(x%i==0)
break;
if(i>=x)
{
printf("%d+",x);
s=s+x;
}
}
printf("\b=%d\n",s);
}

补充:
在用外层的for计算下一个的时候,要把内层for判断出来的素数累加起来啊
否则,计算到下一个的时候,前一个就丢了啊
所以,累加的那句代码,应该在外层for循环的里面,内存for循环的外面(后面)啊

3+5+7=12?

你的结果11是指第一层循环结束之后,X自然是11.结果将是从3 加到10.

因为break只能中断最里层的循环,所以最好用函数来判断是不是素数.

如果一定要这么写, 可以用标号.另外,S应该从2开始.

#include <stdio.h>
void main()
{int x,n=1