結果
| 問題 |
No.3045 反復重み付き累積和
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 20:27:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,216 bytes |
| コンパイル時間 | 152 ms |
| コンパイル使用メモリ | 81,664 KB |
| 実行使用メモリ | 54,304 KB |
| 最終ジャッジ日時 | 2025-06-12 20:28:20 |
| 合計ジャッジ時間 | 3,094 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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)
gew1fw