我一直在尝试项目欧拉问题,但似乎无法解决问题7(https://projecteuler.net/problem=7)。一个很大的问题是我的解决方案无法正常工作,因此我尝试对其进行重写,但是它仍然拒绝提供输出,告诉我在某个地方出错了。
##Problem 7 UNSOLVED
a= 10
b= 1
for c in range (1,a//2):
while b < 10002:
if a % c == 0:
a=a+1
else:
b = b+1
a= a+ 1
print (a)
print (a,b)
##Problem 7 v2
n = 10
p = 4
while p <100002:
for i in range (2,n//2):
if n % i == 0:
break
else:
p = p +1
n = n +1
print(n, p)
您的原始性测试未正确实施。目前,您要在每次数字n没有除数时将变量p加起来。如果您有13个示例作为n,则您的p将增加5或6,而不是1。
您需要重写素数检查,如果n是素数,它会将1加到p上,如果n不是素数,则不加任何内容到p。] >
您可以为此编写一个函数,从而使您的代码更具可读性且易于使用。
这种特权检查功能可能看起来像这样:
def is_prime(n): for i in range(3, int(n**.5)+1): if n % i == 0: return 0 return 1
>>> is_prime(10) 0 >>> is_prime(11) 1
此功能并未针对速度进行优化,但在我的Euler问题#7解决方案中有效,可以在0.132s内获得正确的输出。
请注意,此测试仅适用于大于11的奇数,因为较低的数字将不具有任何迭代,因为它们的根小于3。