算法提高 素数求和
问题描述
输入一个自然数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 }

浙公网安备 33010602011771号