1005 Forsaken喜欢数论 素数筛性质:每个数都被最小的质因子判掉 数论

 

链接:https://ac.nowcoder.com/acm/contest/26656/1005
来源:牛客网

题目描述
Forsaken有一个有趣的数论函数。对于任意一个数xx,f(x)f(x)会返回xx的最小质因子。如果这个数没有最小质因子,那么就返回0。
现在给定任意一个nn,Forsaken想知道\sum_{i = 1}^{n}{f(i)}∑
i=1
n

f(i)的值。

输入描述:
一个整数nn。
输出描述:
一个整数代表上面的求和式的值。
示例1
输入
复制
4
输出
复制
7
备注:
1 \leq n \leq 3e71≤n≤3e7

分析

素数筛

1.大小3e7以上

2.每个数被自己的最小质因子判掉

//-------------------------代码----------------------------

#define int ll
const int N = 3e7 + 10;
int n,m,ans,cnt;
bool primes[30000010];
int pos[N];

void get_primes() {
    if(n == 1) {
        cout<< 0 <<endl;
        rt;
    }
    for(int i = 2;i<=n;i++) {
        if(!primes[i]) {
            ans += i;
            pos[cnt ++ ] = i;
        }
        for(int j = 0;j< cnt && pos[j] * i <= n;j++) {
            primes[pos[j] * i] = 1;
            ans += pos[j];
            if(i % pos[j] == 0) break;
        }
    }
    cout<<ans<<endl;
}

void solve()
{
     cin>>n;
    get_primes();
}

signed main(){
    clapping();TLE;
    
//    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

 

posted @ 2022-07-24 18:47  er007  阅读(33)  评论(0编辑  收藏  举报