結果
| 問題 |
No.2903 A Round-the-World Trip with the Tent
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-15 00:43:48 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 105 ms / 2,000 ms |
| コード長 | 1,775 bytes |
| コンパイル時間 | 266 ms |
| コンパイル使用メモリ | 82,956 KB |
| 実行使用メモリ | 93,792 KB |
| 最終ジャッジ日時 | 2024-09-27 19:30:36 |
| 合計ジャッジ時間 | 3,657 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 42 |
ソースコード
#using ChatGPT o1-preview
mod = 998244353
def linear_sieve(N):
mu = [1] * (N + 1)
spf = [0] * (N + 1) # 最小素因数
primes = []
for i in range(2, N + 1):
if spf[i] == 0:
spf[i] = i
mu[i] = -1
primes.append(i)
for p in primes:
if p * i > N:
break
spf[p * i] = p
if i % p == 0:
mu[p * i] = 0
break
else:
mu[p * i] = -mu[i]
return mu, spf
def factorize(n, spf):
factors = {}
while n > 1:
p = spf[n]
factors[p] = factors.get(p, 0) + 1
n //= p
return factors
def generate_divisors(factors):
from itertools import product
exponents_list = []
for p, exp in factors.items():
exponents_list.append([p ** e for e in range(exp + 1)])
divisors = set()
for exponents in product(*exponents_list):
prod = 1
for e in exponents:
prod *= e
divisors.add(prod)
return list(divisors)
def main():
def solve():
K_str, N_str = input().split()
K = int(K_str)
N = int(N_str)
mod = 998244353
if N == 1:
if K == 1:
print(2)
else:
print(3)
return
mu, spf = linear_sieve(N)
factors = factorize(N, spf)
divisors = generate_divisors(factors)
total = 0
for d in divisors:
nd = N // d
mu_nd = mu[nd]
if mu_nd == 0:
continue
pow2d = pow(2, d, mod)
total = (total + mu_nd * pow2d) % mod
total = (total + mod) % mod # 負の値を回避
print(total)
solve()
main()