AtCoder の問題を解くために必要な実力を付けるために作られた「典型問題」を解いていく企画として、「典型90」があります。
今回は、その内、の38問目である「038 – Large LCM(★3)」を解説していきたいと思います。
なにか、間違っているところなどありましたら、@EitaSugiまで、ご指導ご鞭撻の程、よろしくお願い致します!
問題名 【038 – Large LCM(★3)】
入力
A,B : 正の整数
考察
まずはじめに、最小公倍数について考えます。
最小公倍数=2数の共通する因数*Aのみがもつ因数*Bだけがもつ因数
※2数の共通する因数は、最大公約数です。
そのため、Aだけがもつ因数= A//最大公約数で求められます。Bだけがもつ因数も同様です。
そのため、手順として
- 最大公約数を求める
- 最大公約数でA,Bを割る
- それらをかけて、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)】
コメント