【发布时间】:2021-10-24 16:16:59
【问题描述】:
给定一个整数,我想找到它下面最大的素数。例如:
input 20 -> output 19
input 100 -> output 97.
我已经有了下面给出的简单程序,但我很好奇如何让它更快。
def isPrime(x):
for j in range(2,int(x**0.5)+1):
if x%j==0:
return False
return True
def findPrimeNum(num):
for i in range(num-1,1,-1):
if isPrime(i):
return i
findPrimeNum(600851475143) # -> 600851475067
【问题讨论】:
-
除 2 以外,素数都是奇数。您的代码没有利用这一事实。因此,有一种简单的方法可以让它至少快 50%。由于您的代码正在运行,请考虑在 Code Review 而不是此处发布此问题 - 但如果您这样做,请先阅读他们的发布指南。
-
你可以试试埃拉托色尼筛。
-
我很困惑,这被标记为一个关于
isPrime的问题的重复,当这个问题是关于寻找下一个素数,而不是测试给定的数字是素数. -
@PresidentJamesK.Polk 完成。