AtCoder Beginner Contest 070 C問題
C問題
難易度:茶色
時間:5分くらい
久しぶりなので、問題は簡単め。
Atcoderが4問時代の時は、茶色の問題であれど比較的難易度が簡単な気がします。
N台の時計があり、i(1≦i≦N)番目の時計の針はちょうど Ti秒で時計盤を 1周します。
最初、全ての時計の針は真っ直ぐ上に向いており、止まっています。
イルカは、全ての時計の針を同時に動かし始めました。
再び、全ての時計の針が真っ直ぐ上に向くのは何秒後でしょうか?
最小公倍数を使ってとけばいい問題です。
aとbの最小公倍数とaとbの最大公約数の積は、aとbの積となります。
その原理は単に以下の通りです。
- 最小公倍数 L - 最大公約数 G - 互いに素の整数 a'とb' aとbは以下の通り。(1) a = G・a' b = G・b' a'とb'は互いに素なので最小公倍数に関して以下が成り立つ。(2) L = G・a'・b' (1)より a・b = (G・a')・(G・b') a・b = (G・a'・b')・G a・b = G・L
最大公約数を求めるモジュールは存在するのでこれを活用します。
N個の整数の最大公倍数が一気に得られないので、O(n**2)の計算量を要しています。
import math N = int(input()) T = list(int(input()) for n in range(N)) ans = T[0] for i in range(1,N): ans = ans*T[i] // math.gcd(ans,T[i]) print(ans)