问题是,您需要在数字输入后找到质数,或者如果输入的数字是质数,则返回该质数。它工作得很好。当输入为print(brute_prime(1000))时,它就不起作用了。它返回1001而不是1009。完整的代码如下:
def brute_prime(n):
for i in range(2, int(n**(0.5))):
if n % i == 0:
n += 1
else:
return n发布于 2016-04-15 04:34:22
当您发现一个数字不是质数并转到下一个数字时,您不会重新启动for i循环。这有两个问题:您不会检查下一个数字是否是前面检查的任何因子的倍数,也不会使用新值n将范围的末尾增加到int(n ** 0.5)。
def brute_prime(n):
while true:
prime = true
for i in range(2, int(n ** 0.5)+1):
if n % i == 0:
prime = false
break
if prime:
return n
n += 1break将退出for循环,while true:将在n递增后重新启动它。
发布于 2016-04-15 04:45:26
正如Barmar建议的那样,每次递增n时都需要重新启动循环。范围也会提前结束,因为范围在第二个参数之前停止。
def brute_prime(n):
while True:
for i in range(2, int(n**(0.5)) + 1):
if n % i == 0:
break
else:
return n
n = n+1发布于 2016-04-15 10:28:52
记住2是一个质数。同样,您可以只检查除以2,并跳过所有偶数除法
def brute_prime(n):
while True:
if n==2:return n
elif n%2 ==0 or any(n % i==0 for i in range(3, int(n**(0.5)+1),2)):
n += 1
else:
return nhttps://stackoverflow.com/questions/36633101
复制相似问题