rt,我想了想。
i=l∑r(x−ϕ(x))
首先考虑前缀和作差,我们所求的转换为一个标准的问题:
i=1∑n(x−ϕ(x))
先别急着拆开!不然这就是一个典型的莫比乌斯反演问题,或者杜教筛之类的,但是时间复杂度无法通过这题,这题数据是l,r≤1012。
考虑每个元素对答案的贡献,显然为:
i=1∑n(⌊in⌋−1)
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=666623333;
LL L,R;
LL sum(LL x)
{
LL ans=0;
for(LL l=1,r;l<=x;l=r+1)
{
r=x/(x/l);
ans=(ans+(x/l)*(r-l+1)%mod)%mod;
}
return ans;
}
int main()
{
scanf("%lld%lld",&L,&R);
printf("%lld",(sum(R)-sum(L-1)+mod-R+L-1)%mod);
}
手搓的样例过了,但是样例没过,有人来点醒我哪里有问题吗