読んだらわかる、最小公倍数やん。コードは覚えてないけれども。
最小公倍数を求めるときには、最大公約数を求めるのが定石。
というのも最小公倍数を求めるときには a * bの約数のうち、共通で取り除いても問題ないものを取り除く必要がある。 この共通なものこそが最大公約数なわけである。
最大公約数のアルゴリズムはユークリッドの互除法。 証明はさておき、プログラムコード的には小さいのと大きいのに分け、 大 % 小と大を計算する。大 % 小が0になるまでループしたとき、大が最大公約数になる。
def solve(N, As): n = 1 def gcd(a, b): a, b = min(a, b), max(a, b) while a > 0: a, b = b % a, a return b def lcm(a, b): return a * b // gcd(a, b) for a in As: n = lcm(a, n) return n if __name__ == "__main__": N = int(input()) As = [int(input()) for _ in range(N)] print(solve(N, As))
数ごとに出現数の偶奇をとって奇数のものをカウントすればよい。 pythonだとCounterでワンライナーでも行けるかな?
300点問題波ありすぎない?
from collections import Counter def solve(N, As): c = Counter(As) return len([k for k, v in c.items() if v % 2 == 1]) if __name__ == "__main__": N = int(input()) As = [int(input()) for _ in range(N)] print(solve(N, As))