Language: C++

def prime_fact(n: int)->list:
    '''n の素因数を返す
    '''
    if n < 2:
        return []

    d = 2
    res = []
    while n > 1 and d * d <= n:
        if n % d == 0:
            res.append(d)
        while n % d == 0:
            n //= d
        d += 1

    if n > 1:
        # n が素数
        res.append(n)

    return res


def gen_primes(n: int)->int:
    '''n まで(n 含む)の素数を返します。
    '''
    if n < 2:
        return []
    primes = [2]

    if n < 3:
        return primes
    primes.append(3)

    def is_prime(n: int)->bool:
        for p in primes:
            if n % p == 0:
                return False
        return True

    # 2,3 以降の素数は 6k+1 あるいは 6k-1
    # の形をしていることを利用して列挙する。
    for k in range((N+1)//6):
        k += 1

        if is_prime(6*k-1):
            primes.append(6*k-1)

        if is_prime(6*k+1):
            primes.append(6*k+1)

    return primes


def polynominal_divisors(N: int, A: list)->list:
    # primes = prime_fact(abs(A[-1]))
    A.reverse()
    # 候補となる素数は、N 以下の素数あるいは、aN の素因数

    def check(p: int)->bool:
        '''素数 p が任意の整数 x について f(x) を割り切れるかを
        check する。具体的には、

        - a0
        - a1 + ap + a{2p-1} + ...
        - a2 + a{p+1} + a{2p} + ...
        ...
        - a{p-1} + a{2p-2} + ...
        という項が p で割り切れるかを検査する。
        '''
        if A[0] % p != 0:
            return False

        for i in range(1, p):
            # ai + a{i+p-1} + ... を求めて
            # p で割り切れるか検査する。
            b = 0
            while i <= N:
                b = (b + A[i]) % p
                i += p-1
            if b != 0:
                return False
        return True

    primes = set([p for p in gen_primes(N) if check(p)] + prime_fact(A[-1]))

    return sorted(primes)


if __name__ == "__main__":
    N = int(input())
    A = [int(input()) for _ in range(N+1)]

    ans = polynominal_divisors(N, A)
    for a in ans:
        print(a)


Compiler output:
a.cc:2:5: error: empty character constant
    2 |     '''n の素因数を返す
      |     ^~
a.cc:2:7: warning: missing terminating ' character
    2 |     '''n の素因数を返す
      |       ^
a.cc:2:7: error: missing terminating ' character
    2 |     '''n の素因数を返す
      |       ^~~~~~~~~~~~~~~~~
a.cc:3:5: error: empty character constant
    3 |     '''
      |     ^~
a.cc:3:7: warning: missing terminating ' character
    3 |     '''
      |       ^
a.cc:3:7: error: missing terminating ' character
a.cc:17:11: error: invalid preprocessing directive #n
   17 |         # n が素数
      |           ^
a.cc:24:5: error: empty character constant
   24 |     '''n まで(n 含む)の素数を返します。
      |     ^~
a.cc:24:7: warning: missing terminating ' character
   24 |     '''n まで(n 含む)の素数を返します。
      |       ^
a.cc:24:7: error: missing terminating ' character
   24 |     '''n まで(n 含む)の素数を返します。
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:25:5: error: empty character constant
   25 |     '''
      |     ^~
a.cc:25:7: warning: missing terminating ' character
   25 |     '''
      |       ^
a.cc:25:7: error: missing terminating ' character
a.cc:40:8: error: "," is not a valid filename
   40 |     # 2,3 以降の素数は 6k+1 あるいは 6k-1
      |        ^
a.cc:41:7: error: extended character 。 is not valid in an identifier
   41 |     # の形をしていることを利用して列挙する。
      |       ^
a.cc:41:7: error: invalid preprocessing directive #\U0000306e\U00005f62\U00003092\U00003057\U00003066\U00003044\U0000308b\U00003053\U00003068\U00003092\U00005229\U00007528\U00003057\U00003066\U00005217\U00006319\U00003059\U0000308b\U00003002
   41 |     # の形をしていることを利用して列挙する。
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:55:7: error: invalid preprocessing directive #primes
   55 |     # primes = prime_fact(abs(A[-1]))
      |       ^~~~~~
a.cc:57:7: error: extended character 、 is not valid in an identifier
   57 |     # 候補となる素数は、N 以下の素数あるいは、aN の素因数
      |       ^
a.cc:57:7: error: invalid preprocessing directive #\U00005019\U000088dc\U00003068\U0000306a\U0000308b\U00007d20\U00006570\U0000306f\U00003001N
   57 |     # 候補となる素数は、N 以下の素数あるいは、aN の素因数
      |       ^~~~~~~~~~~~~~~~~~~
a.cc:57:27: error: extended character 、 is not valid in an identifier
   57 |     # 候補となる素数は、N 以下の素数あるいは、aN の素因数
      |                           ^
a.cc:60:9: error: empty character constant
   60 |         '''素数 p が任意の整数 x について f(x) を割り切れるかを
      |         ^~
a.cc:60:11: warning: missing terminating ' character
   60 |         '''素数 p が任意の整数 x について f(x) を割り切れるかを
      |           ^
a.cc:60:11: error: missing terminating ' character
   60 |         '''素数 p が任意の整数 x について f(x) を割り切れるかを
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:61:15: error: extended character 。 is not valid in an identifier
   61 |         check する。具体的には、
      |               ^
a.cc:61:15: error: extended character 、 is not valid in an identifier
a.cc:68:22: error: extended character 。 is not valid in an identifier
   68 |         という項が p で割り切れるかを検査する。
      |                      ^
a.cc:69:9: error: empty character constant
   69 |         '''
      |         ^~
a.cc:69:11: warning: missing terminating ' character
   69 |         '''
      |           ^
a.cc:69:11: error: missing terminating ' character
a.cc:74:15: error: invalid preprocessing directive #ai
   74 |             # ai + a{i+p-1} + ... を求めて
      |               ^~
a.cc:75:15: error: invalid preprocessing directive #p
   75 |             # p で割り切れるか検査する。
      |               ^
a.cc:75:17: error: extended character 。 is not valid in an identifier
   75 |             # p で割り切れるか検査する。
      |                 ^
a.cc:1:1: error: 'def' does not name a type
    1 | def prime_fact(n: int)->list:
      | ^~~
a.cc:64:29: error: expected unqualified-id before '+' token
   64 |         - a1 + ap + a{2p-1} + ...
      |                             ^
a.cc:65:23: error: expected unqualified-id before '+' token
   65 |         - a2 + a{p+1} + a{2p} + ...
      |                       ^
a.cc:65:31: error: expected unqualified-id before '+' token
   65 |         - a2 + a{p+1} + a{2p} + ...
      |                               ^
a.cc:67:18: error: expected unqualified-id before '+' token
   67 |         - a{p-1} + a{2p-2} + ...
      |                  ^
a.cc:67:28: error: expected unqualified-id before '+' token
   67 |         - a{p-1} + a{2p-2} + ...
      |                            ^