結果
問題 |
No.1567 Integer Coefficient Equation
|
ユーザー |
|
提出日時 | 2025-03-29 20:27:06 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,691 bytes |
コンパイル時間 | 568 ms |
コンパイル使用メモリ | 82,968 KB |
実行使用メモリ | 102,604 KB |
最終ジャッジ日時 | 2025-03-29 20:27:21 |
合計ジャッジ時間 | 14,844 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | WA * 38 |
ソースコード
## https://yukicoder.me/problems/no/1567 def main(): T = int(input()) parameters = [] for _ in range(T): p, l, r = map(int, input().split()) parameters.append((p, l, r)) # osa-k法による素因数分解 MAX_SIZE = 5 * 10 ** 5 primes = [i for i in range(MAX_SIZE + 1)] for p in range(2, MAX_SIZE + 1): if primes[p] != p: continue x = 2 * p while x <= MAX_SIZE: if primes[x] == x: primes[x] = p x += p dnum = [0] * (MAX_SIZE + 1) for a in range(1, MAX_SIZE + 1): a0 = a cnt = 0 while primes[a] != 1: p = primes[a] a //= p cnt += 1 dnum[a0] = cnt cum_dnum_lisst = [0] * (MAX_SIZE + 1) cum_dnum = 0 for i in range(1, MAX_SIZE + 1): cum_dnum += 1 if dnum[i] >= 3 else 0 cum_dnum_lisst[i] = cum_dnum # それぞれ回答していく answers = [] for p, l, r in parameters: if p < l: xr = r - p xl = l - p ans = cum_dnum_lisst[xr] - cum_dnum_lisst[xl - 1] elif p == l: xr = r - p ans = cum_dnum_lisst[xr] + 1 elif l < p and p < r: xr = r - p ml = p - l ans = cum_dnum_lisst[xr] + cum_dnum_lisst[ml] + 1 elif p == r: ml = p - l ans = cum_dnum_lisst[ml] + 1 else: # r < p: mr = p - r ml = p - l ans = cum_dnum_lisst[ml] - cum_dnum_lisst[mr - 1] print(ans) if __name__ == "__main__": main()