再次求助
查看原帖
再次求助
264548
Tangent233楼主2021/1/17 15:24
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool isp[1000010];
vector <int> prime;
const int mod=666623333;
void aioutelanisishai(int n)
{
    memset(isp,1,sizeof(isp));
    isp[1]=0;
    for(int i=2;i<=n;i++)
        if(isp[i])
        {
            prime.push_back(i);
            for(int k=2;k*i<=n;k++)
                isp[i*k]=0;
        }
}
vector <int> qp[1000010];//代表从l往后数的第i个数的所有质数
int phi(int x)
{
    int ans=x;
    for(int i=0;i<qp[x].size();i++)
        ans=ans/qp[x][i]*(qp[x][i]-1);
    return ans%mod;
}
signed main()
{
    aioutelanisishai(1000000);
    int l,r;cin>>l>>r;
    for(int i=0;i<prime.size();i++)
        for(int j=max(2*1ll,(l-1)/prime[i]+1)*prime[i];j<=r;j+=prime[i])
                if(j-l>=0)
                    qp[j-l].push_back(prime[i]);
    int ans=0;
    for(int i=l;i<=r;i++)
        ans=(ans+(i-phi(i-l)%mod))%mod;
    cout<<ans%mod;
    return 0;
}

为什么又挂了/kk

2021/1/17 15:24
加载中...