您的位置:首页 > 运维架构

hdu 1299 Diophantus of Alexandria

2012-05-11 09:46 609 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1299

1/x + 1/y = 1/n

因为x,y,n均为正整数,所以x,y均要大于n。

设y=n+k;

那么x=n^2 / k + n

因为x为正整数,所以k为n^2的因子。

因为1 ≤ n ≤ 10^9,所以不能枚举到n求n^2的因子个数。

对于一个数n如果

n=q1^a1 * q2^a2 *...qk^ak;

q1,q2...qk均为n的素因子,那么n的因子个数就可以表示为(a1+1)*(a2+1)*...*(ak+1);

n^2= n*n;

所以n^2=q1^(2*a1) * q2^(2*a2)*...*qk^(2*ak);

n^2的因子个数为(2*a1+1) * (2*a2 +1) *...*(2*ak+1);

code:

View Code

# include<stdio.h>
# include<string.h>
# define N 32005
int visit
;
void init()
{
int i,j;
memset(visit,0,sizeof(visit));
for(i=2;i<=32000;i++)
{
if(visit[i]==0)
{
for(j=i+i;j<=32000;j+=i)
visit[j]=1;
}
}
}
int main()
{
int i,t,n,ncase,sum,count;
init();
scanf("%d",&ncase);
for(t=1;t<=ncase;t++)
{
scanf("%d",&n);
sum=1;
for(i=2;i<=32000;i++)
{
if(n==1) break;
if(visit[i]==0)
{
count=0;
while(n%i==0)
{
count++;
n/=i;
}
sum*=(2*count+1);
}
}
if(n!=1) sum*=3;
printf("Scenario #%d:\n%d\n\n",t,(sum+1)/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: