結果
| 問題 | No.442 和と積 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2017-11-21 11:06:26 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 2 ms / 1,000 ms | 
| コード長 | 835 bytes | 
| コンパイル時間 | 407 ms | 
| コンパイル使用メモリ | 55,468 KB | 
| 実行使用メモリ | 6,948 KB | 
| 最終ジャッジ日時 | 2024-07-04 23:08:43 | 
| 合計ジャッジ時間 | 1,147 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 18 | 
ソースコード
#include <iostream>
using namespace std;
typedef unsigned long long UL;
//最大公約数
unsigned long long gcd(unsigned long long u, unsigned long long v)
{
    // simple cases (termination)
    if (u == v){
        return u;
	}
    if (u == 0){
        return v;
	}
    if (v == 0){
        return u;
	}
    // look for factors of 2
    if (u%2==0){		// uは偶数
        if (v%2==1){	// vは奇数
            return gcd(u >> 1, v);
		}else{			//uもvも偶数
            return gcd(u >> 1, v >> 1) << 1;
		}
    }
    if (v%2==0){		// uは奇数, vは偶数
        return gcd(u, v >> 1);
	}
    // reduce larger argument
    if (u > v){
        return gcd((u - v) >> 1, v);
	}
    return gcd((v - u) >> 1, u);
}
int main(int argc, char* argv[])
{
	UL A,B;
	cin>>A>>B;
	UL g=gcd(A,B);
	cout<<g*gcd((A+B)/g,g)<<endl;
	return 0;
}
            
            
            
        