算法提高 素数求和

问题描述
  输入一个自然数n,求小于等于n的素数之和
样例输入
2 
样例输出
2 
数据规模和约定
  测试样例保证 2 <= n <= 2,000,000
测试代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     long long int n, i, j;
 7     int *arr;
 8     long long int sum = 0;
 9     
10     scanf("%lld", &n);
11     arr = malloc((n + 10) * sizeof(int));
12     for(i = 2; i <= n; i++)
13     {
14         arr[i] = 1;
15     }
16     for(i = 2; i <= n; i++)
17     {
18         if(arr[i])
19         {
20             for(j = 2 * i; j <= n; j += i)
21             {
22                 arr[j] = 0;
23             }
24         }
25     }
26     for(i = 2; i <= n; i++)
27     {
28         if(arr[i])
29         {
30             sum += i;
31         }
32     }
33     printf("%lld\n", sum);
34     free(arr);    
35     return 0;
36 }

 

posted @ 2016-08-25 15:02  新生代黑马  阅读(463)  评论(0)    收藏  举报