数論のような白い牛5月18日見捨てられたレースオフ

シーズン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;
}

おすすめ

転載: www.cnblogs.com/fusiwei/p/11740318.html