Forsaken喜欢数论(线性筛)
登录—专业IT笔试面试备考平台_牛客网
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
const int N=3e7+5;
int primes[N],cnt,n;
bool st[N];
int num[N];
ll ans=0;
void get_primes(int n)
{
for(int i=2;i<=n;i++)
{
if(!st[i])
{
primes[cnt++]=i;
num[i]=i;
}
for(int j=0;primes[j]<=n/i;j++)
{
st[primes[j]*i]=true;
num[primes[j]*i]=primes[j];
if(i%primes[j]==0)break;
}
}
}
void get_sum()
{
for(int i=1;i<=n;i++)
{
ans+=num[i];
}
cout<<ans;
}
int main()
{
cin>>n;
get_primes(n);
get_sum();
}