回文素数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回文素数相关的知识,希望对你有一定的参考价值。

程序地址:http://www.cheemoedu.com/exercise/23


问题描述:

所谓回文素数是指,对一个整数n从左向右和从右向左读结果值相同且是素数,即称为回文素数。
求不超过1000的回文素数。


我的代码:

import math
def prime(m):
    count=0
    for i in range(2,int(math.sqrt(m))+1):
        if m%i==0:
            count=1
    if count!=1:
        return True
    else:
        return False
def palindrome(n):
    if str(n)==str(n)[::-1]:
        return True
    else:
        return False

for j in range(2,1000):
    if prime(j) and palindrome(j):
        print j,


结果:

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


我的思路:

定义两个函数,一个用来判断传入的数是否为素数,另一个用来判断传入的数是否为回文数,然后遍历2到1000中的数,判断是否同时满足既是素数又是回文数;


示例代码:

import math
def isPrimeNumber(num):
    i = 2
    x = math.sqrt(num)
    while i < x:
        if num%i == 0:
            return False
        i += 1
    return True
    
def Reverse(num):
    rNum = 0
    while num:
        rNum = rNum*10 + num%10
        num /= 10
    return rNum
    
def RPrimeNumber(num):
    arr = []
    i = 2
    while i < num:
        if isPrimeNumber(i) and i == Reverse(i):
            arr.append(i)
        i += 1
    return arr
print RPrimeNumber(1000)


结果:

[2, 3, 4, 5, 7, 9, 11, 101, 121, 131, 151, 181, 191, 313, 353, 373, 383, 727, 757, 787, 797, 919, 929]


示例代码有点问题,4和121虽然是回文数但不是素数(2*2和11*11),应该是素数判断函数有问题,把其中的while i < x改为while i <= x即可;


改回来后的结果:

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

以上是关于回文素数的主要内容,如果未能解决你的问题,请参考以下文章

平方回文素数

编程找出所有三位回文素数 用c语言

05:素数回文数的个数

[题解]openjudge-回文素数

回文素数

回文素数的判断,怎么更高效率判断素数