寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C #Volume0-0005 GCD and LCM

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題「最大公約数と最小公倍数」
 正の整数 a,b を入力し、a と b の最大公約数と最小公倍数を出力するプログラムを作成して下さい。

・入力される値
 複数のデータセットが与えられます。
 各データセットは1行に a と b が1つのスペースで区切られて与えられます。入力の最後まで処理して下さい。

・期待する出力
 各データセットに対して、最大公約数と最小公倍数を1つのスペースで区切って1行に出力して下さい。

・条件
 0 < a,b ≤ 2,000,000,000
 a と b の最小公倍数は 2,000,000,000 を超えない。
 データセットの数は 50 を超えない。

僕が作成、提出したコードは、以下のとおりです。

/*
 Volume0-0005 GCD and LCM
 http://judge.u-aizu.ac.jp/
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<stdio.h>
typedef long long ll;
ll gcd(ll a,ll b){
    if(a%b==0){
        return b;
    }else{
        return gcd(b,a%b);
    }
}
ll lcm(ll a,ll b){
    return a*b/gcd(a,b);
}
int main(void){
    ll a,b;
    while(scanf("%lld %lld",&a,&b)!=EOF){
        printf("%lld %lld\n",gcd(a,b),lcm(a,b));
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Volume0-0005 GCD and LCM