hdu 4497 GCD and LCM 容斥原理
2013-09-27 19:54
453 查看
题意:已知l,g其中g=gcd(x,y,z),l=lcm(x,y,z),问有x,y,z多少种组合使得关系成立。
题解:已知x%g=y%g=z%g=0,l%x=l%y=l%z=0,所以l%g=0。这个可以判定是否存在(x,y,z)符合条件。
又l/g=p1^a1*p2^a2*p3^a3*...pk^ak.(pi为素数)
x/g=p1^b1*p2^b2*...*pk^(bk);同理得到y/g,z/g,指数为ci和di.
所以min(bi,ci,di)=0,不然最大公约数是pi^min(ai,bi,ci)*g>g,同理得到max(bi,ci,di)=ai。
之后就是怎么安排(bi,ci,di),其中一个为0,一个为ai,另一个任意0<=k<=ai。使用容斥原理求:
对pi指数的所有可能方案数:fi=所有的方式(ai+1)^3-不含0的情况ai^3-不含ai的情况ai^3+重复删去的即不含0,也不含ai的情况(ai-1)^3
所以答案就是ans=∑fi(1<=i<=k,fi=(ai+1)^3-2*ai^3+(ai-1)^3)
耗时:15MS
题解:已知x%g=y%g=z%g=0,l%x=l%y=l%z=0,所以l%g=0。这个可以判定是否存在(x,y,z)符合条件。
又l/g=p1^a1*p2^a2*p3^a3*...pk^ak.(pi为素数)
x/g=p1^b1*p2^b2*...*pk^(bk);同理得到y/g,z/g,指数为ci和di.
所以min(bi,ci,di)=0,不然最大公约数是pi^min(ai,bi,ci)*g>g,同理得到max(bi,ci,di)=ai。
之后就是怎么安排(bi,ci,di),其中一个为0,一个为ai,另一个任意0<=k<=ai。使用容斥原理求:
对pi指数的所有可能方案数:fi=所有的方式(ai+1)^3-不含0的情况ai^3-不含ai的情况ai^3+重复删去的即不含0,也不含ai的情况(ai-1)^3
所以答案就是ans=∑fi(1<=i<=k,fi=(ai+1)^3-2*ai^3+(ai-1)^3)
耗时:15MS
#include <cstdio> #include <cstring> #include <cmath> #include <queue> #include <iostream> #include <algorithm> using namespace std; int main() { int T; cin>>T; while(T--) { int g,l,i,j,k,t,n,m,ans=1; cin>>g>>l; if(l%g!=0){cout<<0<<endl;continue;}//不成立条件 n=l/g; m=(int)sqrt(n+0.5); for(i=2;i<=m;i++) { if(n%i==0) { t=0; while(n%i==0) { n=n/i; t++; } ans*=(t+1)*(t+1)*(t+1)-2*t*t*t+(t-1)*(t-1)*(t-1);//容斥原理 } } if(n>1) ans*=6;//指数为1 cout<<ans<<endl; } return 0; }
相关文章推荐
- hdu 4497 GCD and LCM(唯一分解+容斥原理)
- HDU 4497 GCD and LCM (数论&组合数学)
- hdu 4497 GCD and LCM(2013 ACM-ICPC吉林通化全国邀请赛——题目重现)
- hdu 4497 GCD and LCM (唯一分解定理 + 计数)
- HDU 4497 GCD and LCM (分解质因数)
- HDU-4497-GCD and LCM-组合计数
- hdu-4497-GCD and LCM-gcd的性质
- HDU 4497 GCD and LCM(素因子分解+组合数学)
- HDU 4497 - GCD and LCM (质因式分解 GCD LCM)
- HDU 4497 GCD and LCM (合数分解)
- hdu 4497 GCD and LCM(排列组合)
- HDU - 4497 GCD and LCM
- 【hdu 4497】GCD and LCM 【算术基本定理】
- HDU 4497 GCD and LCM(唯一分解定理+排列组合)
- HDU - 4497 GCD and LCM
- HDU-4497 GCD and LCM (数学)
- hdu 4497 GCD and LCM
- HDU 4497 GCD and LCM(数学)
- HDU 4497 GCD and LCM (数论)
- HDU 4497 GCD and LCM(拆素数+组合)