最大公约数和最小公倍数问题
Description
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。
条件: 1.P,A是正整数;2.要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:满足条件的所有可能的两个正整数的个数。
Samples
input Copy
3 60
output Copy
4
Hint
样例中的的P Q分别为:
P Q
3 60
15 12
12 15
60 3
所以:满足条件的所有可能的两个正整数的个数共4种。
#include <stdio.h>
#include <math.h>
int gcd(int a,int b);
int main()
{
int x,y;
scanf("%d %d",&x,&y);
int i,j;
int count=0;
long long c=x*y;
int k=0,flag=0;
for(i=1;i<=sqrt(c);i++)
{
if(c%i==0)
{
if(gcd(i,c/i)==x)
{
if(i*i==c)
++flag;
else
++count;
}
}
}
count=count*2+flag;
printf("%d\n",count);
return 0;
}
int gcd(int a,int b)
{
if(a==0)
return b;
if(b==0)
return a;
return gcd(b,a%b);
}
这题其实就是在考你的算法,就是要想尽办法,让题目变成一重循环,最大公约数,最小公倍数,有个定理就是a*b=x*y,意思就是说你会一个,内一个也回了,加油。