题目链接:http://codevs.cn/problem/1012/
题目描述:
题目描述 Description
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件: 1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入描述 Input Description
二个正整数x0,y0
输出描述 Output Description
满足条件的所有可能的两个正整数的个数
样例输入 Sample Input
3 60
样例输出 Sample Output
4
题目分析:
用辗转相除法来求得最大公约数,然后再用两者之积除以最大公约数得到最小公倍数
就这一题来说,要注意(3,4)和(4,3)这样的算两组哦!
AC代码:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int GCD(int x,int y)
{
int a=x,b=y;
if(a<b)
{
int t=a;
a=b;
b=t;
}
int c;
while(b)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int num,p,q;
int main()
{
scanf("%d%d",&p,&q);
for(int i=p;i<=q;i++)
{
for(int j=i;j<=q;j++)
{
if(GCD(i,j)==p)
{
if(i*j/p==q)
num+=2;
}
}
}
cout<<num<<endl;
}