結果
問題 |
No.3045 反復重み付き累積和
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:30:52 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,216 bytes |
コンパイル時間 | 349 ms |
コンパイル使用メモリ | 82,132 KB |
実行使用メモリ | 54,568 KB |
最終ジャッジ日時 | 2025-06-12 20:31:41 |
合計ジャッジ時間 | 2,992 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | WA * 41 |
ソースコード
def factorize(m): factors = {} i = 2 while i * i <= m: while m % i == 0: factors[i] = factors.get(i, 0) + 1 m = m // i i += 1 if m > 1: factors[m] = 1 return factors def compute_mobius(d, primes): mobius = 1 has_square = False for p in primes: if d % p == 0: count = 0 temp = d while temp % p == 0: count += 1 temp = temp // p if count >= 2: has_square = True break mobius *= -1 if has_square: return 0 else: return mobius n, m = map(int, input().split()) if m == 0: print(n) else: factors = factorize(m) primes = list(factors.keys()) divisors = [1] for p in primes: exponents = [p**e for e in range(1, factors[p] + 1)] new_divisors = [] for d in divisors: for e in exponents: new_divisors.append(d * e) divisors += new_divisors sum_mob = 0 for d in divisors: mu = compute_mobius(d, primes) sum_mob += mu * (n // d) result = n - sum_mob print(result)