結果
問題 | No.2075 GCD Subsequence |
ユーザー |
![]() |
提出日時 | 2025-04-16 16:31:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 941 ms / 4,000 ms |
コード長 | 1,561 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 82,512 KB |
実行使用メモリ | 135,892 KB |
最終ジャッジ日時 | 2025-04-16 16:33:45 |
合計ジャッジ時間 | 16,946 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
import sys from collections import defaultdict MOD = 998244353 def main(): max_A = 10**6 min_prime = [0] * (max_A + 1) for i in range(2, max_A + 1): if min_prime[i] == 0: min_prime[i] = i for j in range(i * i, max_A + 1, i): if min_prime[j] == 0: min_prime[j] = i # Handle 1 separately min_prime[1] = 0 def get_primes(x): primes = set() if x == 1: return [] while x != 1: p = min_prime[x] primes.add(p) while x % p == 0: x = x // p return sorted(primes) def generate_factors_with_mu(primes): factors = [(1, 1)] for p in primes: new_factors = [] for (d, mu) in factors: new_d = d * p new_mu = mu * (-1) new_factors.append((new_d, new_mu)) factors += new_factors return factors input = sys.stdin.read().split() n = int(input[0]) a = list(map(int, input[1:n+1])) sum_total = 0 sum_d = defaultdict(int) for x in a: primes = get_primes(x) factors = generate_factors_with_mu(primes) sum_co = 0 for d, mu in factors: sum_co = (sum_co + mu * sum_d[d]) % MOD dp_i = (1 + (sum_total - sum_co)) % MOD sum_total = (sum_total + dp_i) % MOD for d, mu in factors: sum_d[d] = (sum_d[d] + dp_i) % MOD print(sum_total % MOD) if __name__ == "__main__": main()