3つ以上の整数の最小公倍数を求める

2つの数の最大公約数を求める→2つの数の最小公倍数を求める。
求めた最小公倍数と次の数の最小公倍数を同じ手順で求める。
繰り返す。

こんな感じ?

・ユークリッドの互除法で2つの数の最大公約数を求める関数


int gcm(int a, int b) {
	int result = a;
	int k = 0;
	int n = b;
	do {
		k = result % n;
		result = n;
		n = k;
	} while(k != 0);
	return result;
}

・最大公約数を利用して2つの数の最小公倍数を求める関数


int lcm(int a, int b) {
	int g;
	g = gcm(a, b);
	return a*b/g;
}

・2つの数の最小公倍数を順次求めて3つ以上の数の最小公倍数を求める関数


int lcm_n(vector<int> &numbers) {
	int l;
	l = numbers[0];
	for (int i = 1; i < numbers.size(); i++) {
		l = lcm(l, numbers[i]);
	}
	return l;
}

悔しいからここに書く。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C++, 聞いて欲しい独り言 パーマリンク

3つ以上の整数の最小公倍数を求める への3件のフィードバック

  1. o-taki のコメント:

    for ( res=1; true; res++){
    count=0;
    for ( i=0; i=3 ) break;
    }
    return res;

  2. o-taki のコメント:

    盛大にエスケープされた。

    for ( res=1; true; res++){
    count=0;
    for ( i=0; i<numbers.length; i++ ){
    if ( res%numbers[i]==0 ) count++;
    if ( count>=3 ) break;
    }}
    return res;

  3. コスミー のコメント:

    テストするぜ。

    int gcm(int a, int b) {
       int result = a;
       int k = 0;
       int n = b;
       do {
          k = result % n;
          result = n;
          n = k;
       } while(k != 0);
       return result;
    }

コメントを残す

メールアドレスが公開されることはありません。