シーズン5月18日オフホワイト牛数論のように見捨てられました
トピックのポータルは、直接タイトルを指し示します
見捨てられた興味深い算術機能を持っています。任意の数のXXXのために、f(x)がf(x)はf(x)が最小素因数XXXを返します。定性的要因のない最小数が存在しない場合、それは0を返します。
今任意のNNN、見捨てられたが疑問\(Σiは= 1nFの(I) \ sum_ {i = 1} ^ {n}は{F(I)} =Σiは1nFの(I)\) 値。
説明を入力します。
一个整数nnn。
出力説明:
一个整数代表上面的求和式的值。
例1
エントリー
4
輸出
7
備考:
1≤n≤3e71 \leq n \leq 3e71≤n≤3e7
ソリューション:
質問のふるいに並びます。
ラインスクリーンは、最小の素因数を記録することができます。しかし、特定の癌におけるデータの範囲のこの質問理由は...
\(3 \ 10倍^ 7 \) 、このような大きなアレイを開く以上です。
だから我々は唯一の正しい答えを確保するために、選択プロセスに直接ANSを蓄積することができます。
かなりこのような?
コード:
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
const int maxn=3*1e7+10;
int n,cnt,ans;
bool v[maxn];
int prime[maxn];
void euler(int n)
{
cnt=0;
for(int i=2;i<=n;i++)
{
if(!v[i])
prime[++cnt]=i,ans+=i;
for(int j=1;j<=cnt && i*prime[j]<=n;j++)
{
v[i*prime[j]]=1;
ans+=prime[j];
if(i%prime[j]==0)
break;
}
}
}
signed main()
{
scanf("%lld",&n);
euler(n);
printf("%lld",ans);
return 0;
}