项目欧拉37

时间:2014-04-19 17:43:02

标签: python

我目前正在尝试解决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 个答案:

答案 0 :(得分:5)

1不是素数,因此11,31,71,131等数字不能从左到右截断。

相关问题