abc 150 D - Semi Common Multiple (python)
青diff 初の自力AC
解説はX = (ak/2) ∗ (2p + 1) を X が 2 で割り切れる回数と ak/2 が 2 で割り切れる回数が同じ
と言い換えててあたま良すぎかとなった
a のなかにひとつでも ( aj / ai )% 2 == 0 となるものがあれば答えが 0 になって、そうでないなら答えが
( m + a の最小公倍数/2 ) // a の最小公倍数 になると分かったのでそれを頑張って実装した。
import sys input = sys.stdin.readline n,m = map(int,input().split()) a = [int(i) for i in input().split()] a = sorted(list(set(a))) from fractions import gcd lc = a[0] if n != 1: for num,i in enumerate(a[1:]): if lc == 0: break lc = lc * i // gcd(lc, i) if gcd(lc, i) == min(i,lc): for j in a[:num+1]: if (i/j)%2 == 0: lc = 0 break if lc == 0: print(0) else: print((m+lc//2)//lc)