P 1029最大公約数と最小公倍数の問題

2173 ワード

テーマ:
2つの正の整数x 0,y 0(2<=x 0<100000,2<=y 0<=100000,000)を入力し、以下の条件を満たすP,Qの個数を求める
条件:
1.P,Qは正の整数
2.要求P,Qはx 0を最大公約数、y 0を最小公倍数とする.
試求:条件を満たすすべての可能な2つの正の整数の個数.
考え方:
最小公倍数*最大公因数=n*mを知るべきである.これでn*mの因数を列挙できる==半分だけ列挙するので、残りの半分は直接*2.
プログラム:
#include
#include
#include
#include

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);
}