python中的回文素数

时间:2014-03-27 21:30:28

标签: python python-3.x primes palindrome

所以我试图弄清楚如何找到2个数字之间的所有回文素数。 到目前为止,我的代码可以找到回文,但是当我检查素数时,它也打印出非素数。还有多次打印的数字。

你能帮忙吗?

感谢。

a = 0
b = 500
a += 1   
for i in range(a,b):
    if(str(i) == str(i)[::-1]):
        if(i>2):
            for a in range(2,i):
                y = True
                if(i%a==0):
                    y = False
                    break
            if y:
                print(i)

3 个答案:

答案 0 :(得分:2)

根据您最近的代码,您只需要确保为您测试的每个号码重置y,这将作为素数的积极指标。否则,当你到达第一个复合数字4时,它将保持False

>>> a = 0
>>> b = 500
>>> a += 1
>>> for i in range(a,b):
        y = True
        if(str(i) == str(i)[::-1]):
            if(i>2):
                for a in range(2,i):
                    if(i%a==0):
                        y = False
                        break
                if y:
                    print(i)


3
5
7
11
101
131
151
181
191
313
353
373
383

As you can see, all of these are prime.您可以查看wolframalpha提供的素数列表,以确保没有遗漏回文素数。如果你想要包含2,请为此添加一个特殊情况。

答案 1 :(得分:1)

请参阅下面的评论:

a = 0
b = 500
a += 1
y = True
for i in range(a,b):
    if(str(i) == str(i)[::-1]):
        print (i)      # <--- You print every number that is a palindrome
        if(i>2):
            for a in range(2,i):
                if(i%a==0):
                    y = False   # <--- This never gets set back to True
                    break
            if y:
                print(i)

        i+=i   # <--- This is doing nothing useful, because it's a "for" loop

答案 2 :(得分:0)

看看下面的代码,我们也不需要初始化Y。 For-Else块效果很好。

a = 0
b = 500
a += 1
for i in range(a,b):
    if(str(i) == str(i)[::-1]):
        if(i>1):
            for a in range(2,i):
                if(i%a==0):
                    y = False
                    break
            else:
                print(i)

要在答案中包含2,只需确保将@elias提到的if条件检查为(i> 1)