結果
| 問題 |
No.2578 Jewelry Store
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-01-09 22:05:49 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,410 bytes |
| コンパイル時間 | 468 ms |
| コンパイル使用メモリ | 82,252 KB |
| 実行使用メモリ | 73,736 KB |
| 最終ジャッジ日時 | 2024-09-27 00:30:10 |
| 合計ジャッジ時間 | 10,544 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 44 TLE * 1 -- * 9 |
ソースコード
import sys
input = sys.stdin.readline
def prime_factors(m: int):
pf = []
if (m & 1) == 0:
pf.append(2)
while (m & 1) == 0:
m >>= 1
p = 3
while p * p <= m:
if m % p == 0:
pf.append(p)
while m % p == 0:
m //= p
p += 2
if m != 1:
pf.append(m)
return pf
P = 998244353
t, m = map(int, input().split())
pf = prime_factors(m)
k = len(pf)
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
w = list(map(int, input().split()))
a2 = []
w2 = []
for i, (ai, wi) in enumerate(zip(a, w)):
if m % ai == 0:
a2.append(ai)
w2.append(wi)
a = a2
w = w2
zeta = [1] * (1 << k)
for ai, wi in zip(a, w):
t = 0
for j, p in enumerate(pf):
if (m // p) % ai:
t |= 1 << j
zeta[t] = zeta[t] * ((1 + wi) % P) % P
block = 1
while block < 1 << k:
offset = 0
while offset < 1 << k:
for i in range(offset, offset + block):
zeta[i + block] = zeta[i + block] * zeta[i] % P
offset += 2 * block
block <<= 1
ans = 0
for s in range(1 << k):
if (bin(s).count('1') & 1):
ans -= zeta[s]
else:
ans += zeta[s]
print(ans % P, flush=False)