题目描述:
输入2个正整数x0y0(2≤x 0<100000,2≤y0<=1000000),求出满足下列条件的P,Q的个数
条件:
P,Q是正整数
要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的2个正整数的个数.
思路:
gcd(x, y)和mcl(x, y)的乘积为x与y的乘积,从1开始++一直到sqrt(x*y)求出这一段内满足条件的个数,最后乘2就好了(两个数交换过来就是另一个数)。用到了一个辗转相除求gcd的方法。(又是看别的大佬的题解,侵删)。
代码:
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int x, y, sum=0;
int gcd(int x, int y)
{
if (y==0)
return x;
return gcd(y, x%y);
}
int main()
{
scanf("%d %d", &x, &y);
if (x==y){printf("1"); return 0;}
for (int i=1; i<=sqrt(x*y); i++){
if (x*y%i==0 && gcd(i, x*y/i)==x)
sum++;
}
printf("%d", sum*2);
return 0;
}