P1029 最大公约数和最小公倍数问题

题目大意:

输入二个正整数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);
}

猜你喜欢

转载自blog.csdn.net/qq872425710/article/details/79451427