题目大意:
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件:
1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
思路:
大家应该知道最小公倍数*最大公因数=n*m。这样就可以枚举n*m的因数==因为只用枚举一半,另外一半就直接*2.
程序:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
int gcd(int x,int y){
if (y==0) return x;
else return gcd(y,x%y);
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
int ans=0;
for (int i=1;i<=(int)sqrt(n*m);i++){
if ((n*m)%i==0&&gcd(i,(n*m)/i)==n) ans++;
}
printf("%d",ans*2);
}