项目欧拉 37
我现在正在尝试解决Project Euler的第37个问题。问题的描述可以在这里找到:
http://projecteuler.net/problem=37
这是我为这个问题写的代码:
def is_prime(n):
i = 2
while i<n:
if(n%i == 0):
return False
i+=1
return True
def left_truncable(num):
li = []
x = str(num)
if(is_prime(num)):
n = len(x)
check = ""
i = 1
while(i<n):
if(is_prime(int(x[i:]))):
check = "True"
i+=1
else:
check = "False"
break
if(check == "True"):
li.append(num)
return li
def right_truncable(num1):
ri = []
x1 = str(num1)
if(is_prime(num1)):
n = len(x1)
check = ""
j = 1
while(j<n):
if(is_prime(int(x1[:j]))):
check = "True"
j+=1
else:
check = "False"
break
if(check == "True"):
ri.append(num1)
return ri
def common_elements(list1, list2):
return [element for element in list1 if element in list2]
right = []
for e in range(1, 1000):
r = right_truncable(e)
if(r != []):
right.append(r)
left = []
for f in range(1, 1000):
l = left_truncable(f)
if(l != []):
left.append(l)
print common_elements(right, left)
基本上,我创建了一个函数来找出所有的右截断素数和左截断素数。然后我为这两种素数分别做了两个列表,最后找出了这两个列表中的共同元素。不过,我在前1000个数字中找到了超过11个截断素数。以下是我运行这段代码后得到的输出:
[[11], [13], [17], [23], [31], [37], [53], [71], [73], [113], [131], [137], [173], [197], [311], [313], [317], [373], [797]]
我的代码到底出了什么问题呢?
1 个回答
5
1 不是一个质数,所以像 11、31、71、131 这样的数字不能从左到右截断。