这篇文章是双重的。 我是Python的新手。你知道吗
这是我的老谷歌拼图代码: 'e连续数字中的前10位素数' (https://google-tale.blogspot.ca/2008/07/google-billboard-puzzle.html)
euler = '7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161403970198376793206832823764648042953118023287825098194558153017567173613320698112509961818815930416903515988885193458072738667385894228792284998920868058257492796104841984443634632449684875602336248270419786232090021609902353043699418491463140934317381436405462531520961836908887070167683964243781405927145635490613031072085103837505101157477041718986106873969655212671546889570350354'
for i in range(len(euler) - 3):
if (euler[i + 3]== '1' or euler[i + 3]== '3' or euler[i + 3]== '7' or euler[i + 3]== '9'):
number = int(euler[i:i + 3])
for a in range(2, round(number**0.5)):
if number % a == 0:
break
else:
print(number),
break
奇怪的是,使用上面的代码,我可以找到正确的答案是7427466391(编译需要45mn),但是当我测试代码的3位数时,它给出了709,这是不正确的,因为前3位数的素数是281范围(3,6)。你知道吗
我怎样才能解决这个问题?你知道吗
这是一个被认为是最快找到素数(https://en.wikipedia.org/wiki/Primality_test)的算法(请参阅本页中间的伪代码)。这是我的代码,但它不工作,我进入一个无限循环。你知道吗
for i in range(len(euler) - 3):
if (euler[i + 3]== '1' or euler[i + 3]== '3' or euler[i + 3]== '7' or euler[i + 3]== '9'):
number = int(euler[i:i + 3])
for y in range(2, number-1):
while y * y <= number:
if (number % y != 0 or number % (y+1) != 0):
break
我该怎么修?你知道吗
对于第一部分,将'3'替换为'2',以便它检查第3位是否有异常,而不是第4位:
更改为
类似地,考虑for循环中的范围应该扩展到什么(即len-2或len-3),即使它不适用于本例。你知道吗
一般来说,避免使用magic numbers。定义变量或接受输入以设置N=3或10。。。你知道吗
另外,通过添加
if
条件,您不会获得太多收益,只有潜在的bug(如上所述)。过早优化是万恶之源对于第二部分,当你
break
你的内环时,你并没有真正建立任何素性。你可以做一些简单的事情,比如设置旗帜。在这里,我修改了您的程序以提供一个示例:但是,您的代码实际上是非常不完整的,需要对不同的边缘情况进行大量的关注和测试。你知道吗
在第一部分中,您掌握了Python中range和切片的右端非包含属性。然而,当您只是在索引以查找一个元素时,您还应该关心这个问题吗?我的意思是,对于一个从位置
i
开始的数字,第三个数字真的索引在i+3
吗?你知道吗对于您的第二部分,我没有看到您的代码和伪代码之间的映射。你知道吗
一般提示。您可以将prime\u check逻辑划分为一个返回True或False的函数,并在每次获得数字时调用该函数,然后决定是否要打印它并中断或继续。此外,您为1、3、7、9和1所做的比较可以用
in
缩写。你知道吗相关问题 更多 >
编程相关推荐