问题描述
给定正整数N,求[1,N]之间的所有素数之和.如果没有素数,则之和为0. 1<=N<=1000
输入格式
输入有多行,每行有一个正整数n(1<=n<=1000),如果输入为0,则退出
输出格式
对应每行输入的整数,输出[1,N]之间的所有素数之和.每个结果占一行.
样例输入
1
2
4
0
2
4
0
样例输出
0
2
5
思路:
2
5
用了筛选法才通过。
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,a[1000],n,s=0;
while (scanf("%d",&n))
{
if (n==0)
break;
s=0;
a[0]=0;a[1]=0;a[2]=2;
//排除0和1
for (i=2;i<=n;i++)//数组赋值
a[i]=i;
for (i=2;i<=sqrt(n);i++)
if (a[i]!=0)//除去0和1
for (j=2*i;j<=n;j=j+i )//排除素数i的倍数
a[j]=0;
for (i=0;i<=n;i++)
if (a[i]!=0)
s+=a[i];
printf("%d\n",s);
}
return 0;
}