求助,TLE40分!!!
查看原帖
求助,TLE40分!!!
357900
猜一猜我是谁楼主2022/3/2 20:05
#include<bits/stdc++.h>
using namespace std;
bool vis[10000005];
int p[1000005];
int sum[10000005];
int phi[10000005];
long long ans=0;
int n,t=0;
void work(){
    phi[1]=1;
    for(int i=2;i<=n;i++){
    if(!vis[i]){
        p[++t]=i;
        phi[i]=i-1;
    }
    for(int j=1;j<=t&&i*p[j]<=n;j++){
        vis[i*p[j]]=1;
        if(i%p[j]) phi[i*p[j]]=phi[i]*phi[p[j]];
        else{
            phi[i*p[j]]=phi[i]*p[j];
            break;
        }
    }
    for(int j=1;j<=n;j++) sum[j]=sum[j-1]+phi[j];
}
}
int main(){
    scanf("%d",&n);
    work();
    for(int k=1;k<=t;k++) ans+=sum[n/p[k]]*2-1;
    printf("%lld",ans);
}
2022/3/2 20:05
加载中...