簡単 0件解決済み 正答率0%

最小公倍数

両方の値で割り切れる最小の正の整数を求めてください。

このチャレンジで学べること

  • 最大公約数から最小公倍数を求める
  • 掛ける前に割ってオーバーフローを避ける
  • 関数の中で別の関数を再利用する

問題

原文(英語)を表示

a と b の最小公倍数、すなわち両方で割り切れる最小の正の整数を返してください。lcm(a, b) = a / gcd(a, b) × b です。

lcm(a, b) を実装してください。

入力

a: 1つ目の正の整数。 b: 2つ目の正の整数。

出力

lcm(a, b) を返してください。

制約

1 ≤ a, b ≤ 1,000,000,000

例

例 1
入力:
a = 4
b = 6

期待される出力:
expected = 12
入力:
long long a = 4;
long long b = 6;

期待される出力:
long long expected = 12;
入力:
long a = 4;
long b = 6;

期待される出力:
long expected = 12;

解説

4の倍数: 4, 8, 12…; 6の倍数: 6, 12…; 最初に共通するのは12です。

例 2
入力:
a = 7
b = 7

期待される出力:
expected = 7
入力:
long long a = 7;
long long b = 7;

期待される出力:
long long expected = 7;
入力:
long a = 7;
long b = 7;

期待される出力:
long expected = 7;

解説

同じ数同士の最小公倍数はその数自身です: 7。

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

倍数を探すより、gcdとlcmの関係を使う。

ヒント 2

先にgcdを求めてから、2つの数を慎重に組み合わせる。

ヒント 3

オーバーフローを避けるため、掛ける前に割る。大きい入力でも同様。

目安の計算量

時間 O(log min(a, b))、追加メモリ O(1)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。