BITACM 1050 Diophantus of Alexandria
2014-03-06 21:29
281 查看
题目大意:给定你一个n,问你有多少对x,y满足1/x+1/y=1/n。
首先,x,y>n。
我们设x=n+k(k>0)。
那么1/y=1/n-1/(n+k)=k/(n^2+k*n)
注意到y一定是整数,所以可以考虑把k除下来。
那么(n^2+k*n)/k一定是一个整数。
那么k|n^2。
k的个数一定是奇数个,考虑到x,y的大小问题。最后的答案应该是k的个数加1再除以2。
那么n^2的因子个数是多少个?
先考虑n的因数分解,由唯一分解定理,假设n=p1^k1*p2^k2*p3^k3....
那么n的因子个数就应该是(k1+1)*(k2+1)*(k3+1)*....(对于每个质因数我们都有ki+1种选法,由乘法原理可得)
附:假设x<=y,那么n+k<=(n^2+k*n)/k
化简:k^2+k*n<=n^2+k*n
再化简:k<=n。
首先,x,y>n。
我们设x=n+k(k>0)。
那么1/y=1/n-1/(n+k)=k/(n^2+k*n)
注意到y一定是整数,所以可以考虑把k除下来。
那么(n^2+k*n)/k一定是一个整数。
那么k|n^2。
k的个数一定是奇数个,考虑到x,y的大小问题。最后的答案应该是k的个数加1再除以2。
那么n^2的因子个数是多少个?
先考虑n的因数分解,由唯一分解定理,假设n=p1^k1*p2^k2*p3^k3....
那么n的因子个数就应该是(k1+1)*(k2+1)*(k3+1)*....(对于每个质因数我们都有ki+1种选法,由乘法原理可得)
附:假设x<=y,那么n+k<=(n^2+k*n)/k
化简:k^2+k*n<=n^2+k*n
再化简:k<=n。
#include "cstdio" #include <cmath> #define LL long long int main(){ int kase=1; int T; LL ans; LL n; int cnt; LL tem; scanf("%d",&T); while(T--){ scanf("%lld",&n); ans=1; tem=n; for(int i=2;i<=sqrt(tem+0.5);i++){ if(n%i==0){ cnt=0; while(n%i==0){ cnt++; n/=i; } ans*=(2*cnt+1); } } if(n!=1) ans*=3; printf("Scenario #%d:\n%lld\n\n",kase++,(ans+1)/2); } return 0; }
相关文章推荐
- 2013寒假练习 1050 Diophantus of Alexandria
- HDU1299-Diophantus of Alexandria
- hdu 1299 Diophantus of Alexandria
- HDU_1299 Diophantus of Alexandria
- HDU 1299 Diophantus of Alexandria
- POJ-2917 / HDU-1299 Diophantus of Alexandria
- poj 2917 Diophantus of Alexandria 因数分解解1/x+1/y=1/n
- HDU 1299 Diophantus of Alexandria
- 【HDU】 1299 Diophantus of Alexandria
- Hoj 2305 Diophantus of Alexandria
- HDU1299--Diophantus of Alexandria HDU(109)
- HDOJ 题目1299 Diophantus of Alexandria(数学)
- hdu 1299 Diophantus of Alexandria(数学题)
- hdu1299 Diophantus of Alexandria
- hdu 1129 Diophantus of Alexandria
- HDU 1299 Diophantus of Alexandria (数论)
- HDU-1299 Diophantus of Alexandria 素因子分解
- HDU_1299 Diophantus of Alexandria
- HDU 1299 Diophantus of Alexandria(数论)
- hdu 1299 Diophantus of Alexandria