平方回文素数

问题描述:

素数的平方是回文,比如11*11=121。
求不超过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**2)==str(n**2)[::-1]:
        return True
    else:
        return False
for j in range(2,1000):
    if prime(j) and palindrome(j):
        print j,


结果:

2 3 11 101 307


我的思路:

过程很简单,还是定义两个函数,一个用来判断出入的数是否是素数,另一个用来判断传入数的平方是否为回文数,最后遍历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**2 == Reverse(i**2):
            arr.append(i)
        i += 1
    return arr
print RPrimeNumber(1000)


结果:

[2, 3, 11, 101, 121, 307]


示例代码的结果中的121是错误的,121=11*11   121*121=14641,如果这算是对的,那么111也应该算进去的,111=3*37  111*111=12321


更改:

将示例代码中while  i <  x改为while  i <=  x即可,错误的原因是判断素数的取值范围(2到数的平方根之间的值,)错误,少算了math.sqrt(num);


更改后的结果:

[2, 3, 11, 101, 307]



题目出处:http://www.cheemoedu.com/exercise/24

转载于:https://my.oschina.net/jmbzs/blog/711984

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值