結果
問題 |
No.931 Multiplicative Convolution
|
ユーザー |
![]() |
提出日時 | 2025-04-15 23:19:51 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,539 bytes |
コンパイル時間 | 359 ms |
コンパイル使用メモリ | 82,208 KB |
実行使用メモリ | 70,940 KB |
最終ジャッジ日時 | 2025-04-15 23:21:16 |
合計ジャッジ時間 | 7,286 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 4 TLE * 2 -- * 8 |
ソースコード
def find_primitive_root(p): if p == 2: return 1 factors = {} n = p - 1 i = 2 while i * i <= n: while n % i == 0: factors[i] = True n = n // i i += 1 if n > 1: factors[n] = True for g in range(2, p): flag = True for q in factors: if pow(g, (p - 1) // q, p) == 1: flag = False break if flag: return g return -1 def main(): import sys MOD = 998244353 input = sys.stdin.read().split() ptr = 0 P = int(input[ptr]) ptr += 1 A = list(map(int, input[ptr:ptr + P-1])) ptr += P-1 B = list(map(int, input[ptr:ptr + P-1])) ptr += P-1 if P == 1: print() return g = find_primitive_root(P) log_table = [0] * (P) exp_table = [0] * (P-1) current = 1 for m in range(P-1): exp_table[m] = current log_table[current] = m current = (current * g) % P N = P - 1 A_log = [0] * N B_log = [0] * N for m in range(N): x = exp_table[m] A_log[m] = A[x - 1] % MOD B_log[m] = B[x - 1] % MOD C_log = [0] * N for i in range(N): for j in range(N): m = (i + j) % N C_log[m] = (C_log[m] + A_log[i] * B_log[j]) % MOD C = [0] * (P-1) for m in range(N): k = exp_table[m] C[k - 1] = C_log[m] % MOD print(' '.join(map(str, C))) if __name__ == '__main__': main()