题目大意:给定你一个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。
#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;
}