题目大意:给你一个数N 求 1/X+1/Y=1/N 中X ,Y 有几种组合。
分析思路: 由题意可知 X〉N,Y〉N。 我们可令 Y=N+ K(K为正整数)。
化简可得 X= (N* N)/ K + N 。 X,Y 为正整数 。
所以呢, 只需N* N的因子数即可。
知道了这个,之后就直接 A 就行。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define Len 50000
bool a[Len];
int b[Len];
int k;
void Isprime()
{
int i,j;
a[2]=true;
k=1;
b[0]=2;
for(i=3;i<Len;i++)
{
if(i&1)
a[i]=true;
else
false;
}
for(i=3;i<Len;i++)
{
if(a[i])
{
b[k]=i;
k++;
for(j=i+i;j<Len;j+=i)
a[j]=false;
}
}
}
int main()
{
Isprime();
int x,n,i,j,sum,m=1,t;
scanf("%d",&n);
while(n--)
{
j=0;
sum=1;
scanf("%d",&x);
for(i=0;i<k;i++)
{
t=0;
if(x<b[i])
break;
while(x%b[i]==0 )
{
x=x/b[i];
t++;
}
sum *= (t*2+1);
j++;
}
printf("Scenario #%d:\n",m);
m++;
if(x>1) // 可能 存在 一个 素数 X .
sum*=3;
printf("%d\n\n",(sum+1)/2);
}
return 0;
}