回文素数
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]
以上是关于回文素数的主要内容,如果未能解决你的问题,请参考以下文章