我目前正在尝试解决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]]
我的代码似乎有什么问题?
答案 0 :(得分:5)
1不是素数,因此11,31,71,131等数字不能从左到右截断。