典型90【038 – Large LCM(★3)】をpython解説

Python

AtCoder の問題を解くために必要な実力を付けるために作られた「典型問題」を解いていく企画として、「典型90」があります。

今回は、その内、の38問目である038 – Large LCM(★3)」を解説していきたいと思います。
なにか、間違っているところなどありましたら、@EitaSugiまで、ご指導ご鞭撻の程、よろしくお願い致します!

問題名 【038 – Large LCM(★3)】

問題

入力
A,B : 正の整数

考察

まずはじめに、最小公倍数について考えます。

最小公倍数=2数の共通する因数*Aのみがもつ因数*Bだけがもつ因数
※2数の共通する因数は、最大公約数です。

そのため、Aだけがもつ因数= A//最大公約数で求められます。Bだけがもつ因数も同様です。

そのため、手順として

  1. 最大公約数を求める
  2. 最大公約数でA,Bを割る
  3. それらをかけて、10^18を超えたらLarge,それ以外は数値を出力

コード

import math
A,B = map(int, input().split())

common= math.gcd(A,B)#2数の共通する因数、すなわち最大公約数を求める
eA = A//common#Aだけがもつ因数を求める
eB = B//common#Bだけがもつ因数を求める
ans = eA*eB*common
if ans > 10**18:
    print("Large")
else:
    print(ans)

まとめ

前の問題【034 – There are few types of elements(★4)】
次の問題【039 – Tree Distance(★5)】

コメント

タイトルとURLをコピーしました