给定一个正整数n,求小于等于n的所有素数之和,答案对unsigned long long自然溢出后取模。 解题思路:使用筛法求素数,将素数累加到答案
时间: 2024-06-06 10:08:46 浏览: 109
中即可。以下是参考代码:
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1e7 + 5;
int prime[MAXN], is_prime[MAXN];
int cnt_prime;
unsigned long long sum_prime;
void get_primes(int n)
{
memset(is_prime, true, sizeof(is_prime));
for (int i = 2; i <= n; i++)
{
if (is_prime[i])
{
prime[++cnt_prime] = i;
sum_prime += i;
}
for (int j = 1; j <= cnt_prime && i * prime[j] <= n; j++)
{
is_prime[i * prime[j]] = false;
if (i % prime[j] == 0)
break;
}
}
}
int main()
{
int n;
cin >> n;
get_primes(n);
cout << sum_prime << endl;
return 0;
}
当然,实际运算中需要对答案进行取模,因此答案类型应选用 unsigned long long 类型。
阅读全文