「MCOI-02」Convex hull 凸包 题解
验题人写的一个题解,感觉比出题人的式子简单多了,而且用不着莫反。
考虑
枚举
设
则
式子推完了!
先在
放个代码:
#include<bits/stdc++.h>
using namespace std;
const int N=2000005;
int n,m,p,d[N],ans;
void init(int n){
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j+=i)
d[j]++;
}
inline int calc(int n,int k){
int ret=0;
for(int i=k;i<=n;i+=k)ret=(ret+d[i])%p;
return ret;
}
int main(){
scanf("%d%d%d",&n,&m,&p);
if(n>m)swap(n,m);
init(m);
for(int i=1;i<=n;i++)ans=(ans+1LL*calc(n,i)*calc(m,i)%p)%p;
printf("%d\n",ans);
return 0;
}