WA求助
查看原帖
WA求助
557958
danny101楼主2022/4/16 19:22

rt.下载样例后本地运行正确,但洛谷评测姬返回

Wrong Answer.wrong answer Too short on line 2.

代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,vis[5000001],cnt,prime[5000001],mu[5000001],w[5000001];
long long phi[5000001],ans;
bitset<5000001>v;
int _(int x){
    return n/x;
}
int cal(int n){
    if(n<=5000000)return mu[n];
    if(v[_(n)])return w[_(n)];
    int ret=1;
    for(int l=2,r;l<=n;l=r+1){
        r=n/(n/l);
        ret-=(r-l+1)*cal(n/l);
    }
    v[_(n)]=1;
    return w[_(n)]=ret;
}
int main(){
    phi[1]=mu[1]=1;
    for(int i=2;i<=5000000;i++){
        if(!vis[i])prime[++cnt]=i,mu[i]=-1,phi[i]=i-1;
        for(int j=1;j<=cnt&&i*prime[j]<=5000000;j++){
            vis[i*prime[j]]=1;
            if(!(i%prime[j])){
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            phi[i*prime[j]]=phi[i]*(prime[j]-1);
            mu[i*prime[j]]=-mu[i];
        }
        mu[i]+=mu[i-1];
        phi[i]+=phi[i-1];
    }
    cin>>t;
    while(t--){
        ans=0;
        v.reset();
        scanf("%lld",&n);
        if(n<=5000000)printf("%lld %d\n",phi[n],mu[n]);
        else{
            for(int l=1,r;l<=n;l=r+1){
                r=n/(n/l);
                ans+=(n/l)*(n/l+1)/2*(cal(r)-cal(l-1));
            }
            printf("%lld %d\n",ans,cal(n));
        }
    }
}
2022/4/16 19:22
加载中...