結果
| 問題 |
No.1661 Sum is Prime (Hard Version)
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2022-10-04 02:38:01 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 608 ms / 3,000 ms |
| コード長 | 1,339 bytes |
| コンパイル時間 | 457 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 87,424 KB |
| 最終ジャッジ日時 | 2024-12-30 17:01:00 |
| 合計ジャッジ時間 | 6,329 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
import sys
readline=sys.stdin.readline
def Primes_Count(N):
if N<2:
return 0
v=int(N**0.5)+1
smalls=[i//2 for i in range(1,v+1)]
smalls[1]=0
s=v//2
roughs=[2*i+1 for i in range(s)]
larges=[(N//(2*i+1)+1)//2 for i in range(s)]
skip=[False]*v
pc=0
for p in range(3,v):
if smalls[p]<=smalls[p-1]:
continue
q=p*p
pc+=1
if q*q>N:
break
skip[p]=True
for i in range(q,v,2*p):
skip[i]=True
ns=0
for k in range(s):
i=roughs[k]
if skip[i]:
continue
d=i*p
larges[ns]=larges[k]-(larges[smalls[d]-pc] if d<v else smalls[N//d])+pc
roughs[ns]=i
ns+=1
s=ns
for j in range((v-1)//p,p-1,-1):
c=smalls[j]-pc
e=min((j+1)*p,v)
for i in range(j*p,e):
smalls[i]-=c
for k in range(1,s):
m=N//roughs[k]
s=larges[k]-(pc+k-1)
for l in range(1,k):
p=roughs[l]
if p*p>m:
break
s-=smalls[m//p]-(pc+l-1)
larges[0]-=s
return larges[0]
L,R=map(int,readline().split())
ans=Primes_Count(R)-Primes_Count(L-1)+Primes_Count(2*R-1)-Primes_Count(2*L)
if R==1:
ans+=1
print(ans)
vwxyz