AtCoder Beginner Contest 276 D - Divide by 2 or 3
提出コード
N=int(input()) a=list(map(int,input().split())) from functools import reduce import math def my_gcd(*numbers): return reduce(math.gcd, numbers) gcd=my_gcd(*a) a=[i/gcd for i in a] def prime_factorize(n): a = [] while n % 2 == 0: a.append(2) n //= 2 f = 3 while f * f <= n: if n % f == 0: a.append(f) n //= f else: f += 2 if n != 1: a.append(n) return a data=[prime_factorize(i) for i in a] #print(data) kara=[] for i in data: kara+=i kara_set=set(kara) #print(kara_set) if kara_set=={2,3} or kara_set=={2} or kara_set=={3}: print(len(kara)) elif len(kara_set)==0: print(0) else: print(-1)
考え方
すべての数を等しくできるときその数は最大公約数になるはず。
最大公約数×2n×3mになっているはずなので、
すべての数を最大公約数で割る。
そして素因数分解して2と3のみが出てくるなら要件を満たせる。
要件を満たせるなら、素因数分解して出てきた2と3の数の合計が求める答えになる。