http://172.20.6.3/Problem_Show.asp?id=1375
网上搜推理图。
有一段没有写莫比乌斯反演都快忘了。。数学能力--,定理完全不会推,但是这道题整体来说应该是比较好写的(虽然我没写出来)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=;
long long a,b,d;
long long f[maxn]={},su[maxn]={};
long long w[maxn][]={};
long long tot=,cnt1=,cnt2=;
bool vis[maxn]={};
int main(){
scanf("%I64d%I64d%I64d",&a,&b,&d);
a/=d,b/=d;
if(b<a)swap(a,b);
f[]=; int z;
for(int i=;i<=a;i++){
if(!vis[i])su[++tot]=i,f[i]=-;
for(int j=;j<=tot;j++){
z=i*su[j];
if(z>a)break;
vis[z]=;
if(i%su[j]) f[z]=-f[i];
else break;
}
}
long long ans=;
for(int i=;i<=a;i++){
ans+=f[i]*(a/i)*(b/i);
}
printf("%I64d\n",ans);
return ;
}