用範例測資測 41ms 所以建表應該沒問題 (可以這樣看嗎?
以下質數表
x=[2,3]
for c in range(3,10000,2): #忽略偶數
i=int(c**(1/2))+1 #測到平方根加一
for g in range(3,i+1): #本來想用(3,i+1,2)感覺會比較快,但不知道為什麼會缺項
if c%g==0:
break
if g==i:
x=x+[c]
以下主程式
while True:
try:
a,b=map(int,input().split());t=0
if a > b:
a,b=b,a
if a==2:
t+=1 #避開a==2不然下面的range間隔不能為2
if a%2==0:
a=a+1 #避開a為偶數不然下面的range間隔不能為2
for n in range(a,b+1,2): #忽略偶數
if n in x:
t+=1
print(t)
except:
break
問題 1:為什麼質數表間隔為2會缺項
2:想請教可以怎麼加速呢?(本人新手不會用太難的用法
TLE:9S
噴小力點 謝謝!!!!!!
用範例測資測 41ms 所以建表應該沒問題 (可以這樣看嗎?
以下質數表
x=[2,3]
for c in range(3,10000,2): #忽略偶數
i=int(c**(1/2))+1 #測到平方根加一
for g in range(3,i+1): #本來想用(3,i+1,2)感覺會比較快,但不知道為什麼會缺項
if c%g==0:
break
if g==i:
x=x+[c]
以下主程式
while True:
try:
a,b=map(int,input().split());t=0
if a > b:
a,b=b,a
if a==2:
t+=1 #避開a==2不然下面的range間隔不能為2
if a%2==0:
a=a+1 #避開a為偶數不然下面的range間隔不能為2
for n in range(a,b+1,2): #忽略偶數
if n in x:
t+=1
print(t)
except:
break
問題 1:為什麼質數表間隔為2會缺項
2:想請教可以怎麼加速呢?(本人新手不會用太難的用法
TLE:9S
噴小力點 謝謝!!!!!!
1. 因為如果i是偶數,如果間隔設成2,g永遠是奇數,g==i一定是False。所以if g==i可以改成if g==i or g==i-1