結果
| 問題 |
No.1657 Sum is Prime (Easy Version)
|
| コンテスト | |
| ユーザー |
vwxyz
|
| 提出日時 | 2022-10-04 02:36:28 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,319 bytes |
| コンパイル時間 | 235 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-12-28 09:27:50 |
| 合計ジャッジ時間 | 2,089 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 WA * 1 |
ソースコード
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)
print(ans)
vwxyz