C语言求100以内的质数的和怎么写

如题所述

#include<stdio.h>
#include<math.h>
int main()
{
int i, n, sum = 0;
for ( n = 2; n <= 100; n++ )
{
for(i=2;i<= sqrt( n );i++) //i <sqrt(n)时则自然跳出循环
{
if(n%i==0)
{
break;
}
}
if(i < sqrt(n) )

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

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-19
#include <stdio.h>
#include <math.h>
int IsPrime(int n)
{
int i, s;
for(i = 2, s = sqrt(n); i <= s; i++)
if(n % i == 0) return 0;
return 1;
}

void main( )
{
int i, sum;
for(i = 2, sum = 0; i < 100; i++)
if(IsPrime(i)) sum += i;
printf("100以内的所有的质数的和为%d\n", sum);
}本回答被提问者采纳
第2个回答  2018-10-20
以我来看我觉得两个for循环都有问题。
首先第一个for循环应该错了。应该是i < 100。因为是求100以内的,所以要循环到100。
这个程序就是利用for循环让i从2遍历到99.然后利用j找出了1和本身之外i的因数。
那么第二个for循环问题就来了,我们寻找i的因数的时候,并不需要从2一直找到i本身,只要找到i的一半就可以停止了。举个简单例子,比如我们要找98的因数,那么我们只需要找到98÷2 = 49就行了,因为49之后的数字是肯定不能整除98的。同理大于i/2之后的数字是肯定不能够整除i的。所以第二个for的条件应该是j <= (i/2)而不是j。下面就简单了。如果j是i的因数,那么i%j=0. 就直接continue(顺便提一句这里是不能用break的,因为break是直接跳出了for循环,相当于直接结束了整个for循环,而此时还没有遍历到100的,应该用continue,continue就是结束当前循环并且执行i++继续下一轮循环)继续循环而不用执行print语句(这个时候代表i不是质数,因为除了1和它本身还有j这个因数。)。同理,如果从2到i/2都没有i的因数,那么就说明i没有其他因数,也就是质数了,所以print输出i。
另外补充一下:
i/j是求i除以j的商,比如11 / 3 = 3; 6 / 3 = 2
i%j是求i除以j的余,比如11 % 3 = 2; 6 % 3 = 0。
第3个回答  2014-03-19
召唤100以内的质数的和,现身吧!