原本的寫法
時間過不了 怎麼用都是 TLE
import math
def is_prime(n):
if n < 2:
return 0
if n == 2 or n == 3 or n == 5:
return 1
if n % 2 == 0:
return 0
elif n % 3 == 0:
return 0
elif n % 5 == 0:
return 0
for j in range(5, int(math.sqrt(n)) + 1, 6):
if n % j == 0 or n % (j + 2) == 0:
return 0
else:
return 1
while True:
try:
intmp = input().split()
int1 = int(intmp[0])
int2 = int(intmp[1])
ans = 0
for i in range(int1, int2 + 1):
if is_prime(i):
ans += 1
print(ans)
except EOFError:
break
import math
while True:
try:
intmp = input().split()
int1 = int(intmp[0])
int2 = int(intmp[1])
ans = 0
if int1 - int2 > 1000:
print(0)
break
for i in range(int1, int2 + 1):
if i < 2:
continue
if i == 2 or i == 3 or i == 5:
ans += 1
continue
if i % 2 == 0:
continue
elif i % 3 == 0:
continue
elif i % 5 == 0:
continue
for j in range(5, int(math.sqrt(i)) + 1, 6):
if i % j == 0 or i % (j + 2) == 0:
break
else:
ans += 1
print(ans)
except EOFError:
break
新的
把檢查是否為質數的地方改成函式而已
個人感覺效率應該挺接近的
import math
def is_prime(n):
if n < 2:
return 0
if n == 2 or n == 3 or n == 5:
return 1
if n % 2 == 0:
return 0
if n % 3 == 0:
return 0
if n % 5 == 0:
return 0
for j in range(5, int(math.sqrt(n)) + 1, 6):
if n % j == 0 or n % (j + 2) == 0:
return 0
return 1
while True:
try:
intmp = input().split()
int1 = int(intmp[0])
int2 = int(intmp[1])
ans = 0
for i in range(int1, int2 + 1):
if is_prime(i):
ans += 1
print(ans)
except EOFError:
break
但剛好就這樣過了w
可能是我能力不好 所以有不用函式的方法的話 還請跟我說一下
我想知道其他的解法