在Python中查找回文素数

2024-09-30 22:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

回文素数是也是回文素数。 例如,131是素数,也是回文素数,313和757也是。在

我需要编写一个函数来显示第一个n回文素数。 每行显示10个数字并正确对齐,如下所示:

2     3     5     7    11   101   131   151   181   191
313   353   373   383   727   757   787   797   919   929

我的代码是:

^{pr2}$

代码是有效的,但不是我想要的:

>>> paliPrime(10)
3
5
7
>>> 

我想要的是一个函数,它显示前n个回文素数。它应该每行显示10个数字,并正确对齐数字。在


Tags: 函数代码数字素数pr2paliprime
2条回答

使用indefinite primes generator并在其上加上一个itertools过滤器,只保留回文素数,然后使用islice(filtered_primes,n)获得{}第一个这样的素数:

from itertools import *

def palindPrimes(n):
    k = 0
    for p in islice( filterfalse( lambda x: str(x) != str(x)[::-1], 
                                  postponed_sieve()), n):
      ## adjust the alignment and print it, then
      k += 1
      if k == 10:
          k = 0
          ## print a newline to start a new line

任性向你展示了一种很好的方法(随波逐流)。我来告诉你你的错误之处,这样你就可以从中吸取教训。在

因为你不知道前N个素数回生字的范围,所以你想无限期地迭代,并对你找到的那些进行计数。在简化的伪代码中。在

count = 0
number = 2
while count < N
    if number is palidromic prime
        print number
        count += 1
    number += 1

通过在代码中添加一些提示,以正确的格式打印数字,您将得到

^{pr2}$

一个一般性的建议是,你应该让每个职能部门承担一项责任。在这里,您可以生成并打印数字。想象一下,如果有一天你想重用代码来生成这些数字,这样它们就可以在程序中安静地使用了。你到处都是指纹。在

现在,关于解决方案,您可能已经注意到,我研究了从3开始,以2为增量的数字。这是因为你保证所有的偶数,除了2以外,都不是质数。在

在这里,你的意志力所显示的东西变得有意义了。对于generate下一个素数或check是否一个数是素数而不是强制尝试除法,有更好的算法,顺便说一句,你可以限制到sqrt(i)。在

相关问题 更多 >