AtCoder Beginner Contest 070 C / 073 C

beta.atcoder.jp

読んだらわかる、最小公倍数やん。コードは覚えてないけれども。

最小公倍数を求めるときには、最大公約数を求めるのが定石。

というのも最小公倍数を求めるときには 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))

beta.atcoder.jp

数ごとに出現数の偶奇をとって奇数のものをカウントすればよい。 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))