#include"bits/stdc++.h"
using namespace std;
typedef long long ll;
#define regi register int
const int N=50005;int pri[N],cnt,mu[N],n;bool f[N];
void Linear_Shaker(){
f[1]=true;mu[1]=1;
for(regi i=2;i<=N-5;i++){
if(!f[i])pri[++cnt]=i,mu[i]=-1;
for(regi j=1;j<=cnt&&i*pri[j]<=N;j++){
f[i*pri[j]]=1,mu[i*pri[j]]=-mu[i];
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
}
}
}
int di[N<<1],di2[N<<1],top,top2;
ll Calc(){
ll res=0;
for(regi y=1;y<=n/(y+1);y++){
top=0;
for(regi i=1;i<=y/i;i++){
if(i*i==y)di[++top]=i;
else if(y%i==0){
di[++top]=i;
di2[++top2]=y/i;
}
}
while(top2)di[++top]=di2[top2--];
int last=0;
for(regi x=1;x<y&&x+y<=n/y;x=last+1){
last=min(n/(n/y/(x+y))/y-y,y-1);
ll cnt=0;
for(regi j=1;di[j]<=last&&j<=top;j++)
cnt+=mu[di[j]]*(last/di[j]-(x-1)/di[j]);
res+=n/y/(x+y)*cnt;
}
}
return res;
}
int main(){
Linear_Shaker();cin>>n;
cout<<Calc()<<endl;
return 0;
}
[BZOJ2671] Calc和与积 - 容斥原理,莫比乌斯反演定理
最新推荐文章于 2023-11-06 15:45:12 发布