C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥
Posted sdutning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥相关的知识,希望对你有一定的参考价值。
-
C - Visible Trees
- HDU - 2841
- 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质。能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质
- 也就是在 1 - m 1 - n 中找互质的对数,容斥 求一下即可
-
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 123456 bool vis[maxn+10]; ll t,n,m,prime[maxn+10]; ll mu[maxn+10],ans,c; void getphi() { int cnt=0; mu[1]=1; for(int i=2; i<maxn; i++) { if(!vis[i]) { prime[++cnt]=i; mu[i]=-1; } for(int j=1; j<=cnt&&i*prime[j]<maxn; j++) { vis[i*prime[j]]=1; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } } } int main() { getphi(); scanf("%lld",&t); while(t--) { ans=0; scanf("%lld%lld",&n,&m); c=min(n,m); for(int i=1; i<=c; i++) ans+=(ll)mu[i]*(n/i)*(m/i); printf("%lld ",ans); } return 0; }
以上是关于C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥的主要内容,如果未能解决你的问题,请参考以下文章