P4450 双亲数

时间:2023-01-17 15:40:36

思路

同zap-queries

莫比乌斯反演的板子

数据范围小到不用整除分块。。。

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int mu[1010000],isprime[1010000],iprime[1010000],cnt,n,m,d;
void prime(int n){
isprime[1]=true;
mu[1]=1;
for(int i=2;i<=n;i++){
if(!isprime[i]){
iprime[++cnt]=i;
mu[i]=-1;
}
for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){
isprime[iprime[j]*i]=true;
mu[iprime[j]*i]=-mu[i];
if(i%iprime[j]==0){
mu[iprime[j]*i]=0;
break;
}
}
}
}
signed main(){
prime(1000100);
scanf("%lld %lld %lld",&n,&m,&d);
if(n<m)
swap(n,m);
int ans=0;
for(int i=1;i<=n/d;i++){
ans+=mu[i]*(m/(i*d))*(n/(i*d));
}
printf("%lld\n",ans);
return 0;
}