結果
問題 | No.1661 Sum is Prime (Hard Version) |
ユーザー | tomo0608 |
提出日時 | 2021-08-27 23:26:20 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,204 bytes |
コンパイル時間 | 184 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 1,033,276 KB |
最終ジャッジ日時 | 2024-11-21 05:25:33 |
合計ジャッジ時間 | 48,271 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 72 ms
81,024 KB |
testcase_01 | AC | 85 ms
509,568 KB |
testcase_02 | TLE | - |
testcase_03 | WA | - |
testcase_04 | AC | 69 ms
81,108 KB |
testcase_05 | AC | 83 ms
502,228 KB |
testcase_06 | AC | 84 ms
82,212 KB |
testcase_07 | AC | 68 ms
83,644 KB |
testcase_08 | AC | 69 ms
80,512 KB |
testcase_09 | AC | 83 ms
463,552 KB |
testcase_10 | AC | 68 ms
80,640 KB |
testcase_11 | AC | 82 ms
503,604 KB |
testcase_12 | MLE | - |
testcase_13 | MLE | - |
testcase_14 | TLE | - |
testcase_15 | TLE | - |
testcase_16 | TLE | - |
testcase_17 | TLE | - |
testcase_18 | AC | 1,813 ms
291,100 KB |
testcase_19 | TLE | - |
testcase_20 | AC | 1,650 ms
293,380 KB |
testcase_21 | TLE | - |
testcase_22 | TLE | - |
testcase_23 | MLE | - |
ソースコード
from bisect import bisect def prime_sieve(n): """ Efficient prime sieve, due to Robert William Hanks. Source: http://stackoverflow.com/a/2068548 """ sieve = [True] * ((n+1)//2) for i in range(3,int(n**0.5)+1,2): if sieve[i//2]: sieve[i*i//2::i] = [False] * ((n-i*i-1)//(2*i)+1) return [2] + [2*i+1 for i in range(1,n//2) if sieve[i]] """ Limit controls the number of primes that are sieved to cache small values of pi(x). Without caching, runtime will be exponential. When computing pi(x), limit should be at least sqrt(x). A higher value of limit that caches more values can sometimes improve performance. """ limit = 10**6 primes = prime_sieve(limit) phi_cache = {} def phi(x, a): """ Implementation of the partial sieve function, which counts the number of integers <= x with no prime factor less than or equal to the ath prime. """ # If value is cached, just return it if (x, a) in phi_cache: return phi_cache[(x, a)] # Base case: phi(x, a) is the number of odd integers <= x if a == 1: return (x + 1) // 2 result = phi(x, a-1) - phi(x // primes[a-1], a-1) phi_cache[(x, a)] = result # Memoize return result pi_cache = {} def pi(x): """ Computes pi(x), the number of primes <= x, using the Meissel-Lehmer algorithm. """ # If value is cached, return it if x in pi_cache: return pi_cache[x] # If x < limit, calculate pi(x) using a bisection # algorithm over the sieved primes. if x < limit: result = bisect(primes, x) pi_cache[x] = result return result a = pi(int(x ** (1./4))) b = pi(int(x ** (1./2))) c = pi(int(x ** (1./3))) # This quantity must be integral, # so we can just use integer division. result = phi(x,a) + (b+a-2) * (b-a+1) // 2 for i in range(a+1, b+1): w = x / primes[i-1] b_i = pi(w ** (1./2)) result = result - pi(w) if i <= c: for j in range(i, b_i+1): result = result - pi(w / primes[j-1]) + j - 1 pi_cache[x] = result return result l,r = map(int,input().split()) print(int(pi(r) - pi(l-1) + pi(2*r-1) - pi(2*l)))