ZOJ 1577 GCD & LCM

大意是输入a,b;求出有多少对数p,q满足GCD(p,q) =a;LCM(p,q) =b。

输出对数。

思路是令x=lcm/gcd(如果lcm不能被整除,则输出0);然后再将x素因子分解,判断x有k个互异的素因子,

对数为2^k。

代码如下:

#include"stdio.h"
#include"math.h"
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
	if(b%a!=0){printf("0\n");continue;}
int n=0,ans=1;
b/=a;int i=2,j=(int)sqrt((double)b);
for(i=2;i<=j;i++)
if(b%i==0)
{
n++;
while(b%i==0){b/=i;}
}
if(b!=1) n++;
for(i=1;i<=n;i++)
ans*=2;
printf("%d\n",ans);
}
return 0;
}

posted @ 2011-05-01 01:28  Ac_smile  阅读(231)  评论(0编辑  收藏  举报