问题描述:
所谓回文素数是指,对一个整数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]
题目出处:http://www.cheemoedu.com/exercise/23