题目描述 Description
用户输入一个数,然后输出从1开始一直到这个数为止(包括这个数)中所有的合数的和。
输入描述 Input Description
一个整数N,0<N<=1000
输出描述 Output Description
一行,一个整数,即从1到N中所有合数的和
样例输入 Sample Input
样例一:100
样例二:9
样例输出 Sample Output
样例一:3989
样例二:27
数据范围及提示 Data Size & Hint
先找出素数,然后把不是素数的和相加。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; #define N 10010 int prime[N]; bool check[N]; int main() { memset(check,0,sizeof check); int tot=0; int n,sum=0; scanf("%d",&n); for(int i=2;i<=n;i++){ if(!check[i]) prime[tot++]=i; for(int j=0;j<tot;j++){ if(i*prime[j]>n) break; check[i*prime[j]]=1; if(i%prime[j]==0) break; } } for(int i=2;i<=n;i++) if(check[i]) sum+=i; printf("%d ",sum); return 0; }