地址:http://acm.bit.edu.cn/mod/programming/view.php?a=536
给定n,问1/X+1/Y=1/n的正整数解有几组(设X<=Y)。
设X=n+a,Y=n+b 代入化简后可得 n*n=a*b. 然后就一目了然了,a与b就是n*n的每一对约数。故答案就是n*n的约数个数+1再除以2。
自己想不到就是想不到。。怎么办T T
#include<iostream>
using namespace std;
int main()
{
int t,n,i,j;
__int64 ans;
scanf("%d",&t);
for(int cs=1;cs<=t;cs++)
{
ans=1;
scanf("%d",&n);
for(i=2;i*i<=n;i++)
{
for(j=0;n%i==0;j++,n/=i);
ans*=(2*j+1);
}
if(n>1) ans*=3; //若还剩一个大质因子
printf("Scenario #%d:\n%I64d\n\n",cs,(ans+1)/2);
}
return 0;
}