派森 #P125. 寻找反素数

描述

反素数,英文称作 emirp(prime(素数)的左右颠倒拼写),是素数的一种。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

把一个素数的阿拉伯字数字序列变成由低位向高位反写出来,得到的另一个数还是素数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

例如素数13,反写就是31,它是另一个素数,所以13是一个反素数。这个定义排除了相关的回文素数,因为回文素数反写不是另一个数而是它本身。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

最小的几个反素数为:13, 17, 31, 37, 71, 73, 79, 97, 107, 113, 149, 157, 167, 179, 199, ...‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

编写程序,输入两个数m和n,要求n > m,输出m~n(包含m和n)之间所有的反素数,数之间用空格隔开。

样例

输入1

5 50

输出1

13 17 31 37

代码:

m,n = map(int,input().split())
def isPrime(n):
    if n==1:
        return False
    for i in range(2,n):
        if n%i==0:
            return False
    return True
def isReversePrime(n):
    if str(n)==str(n)[::-1]:
        return False
    if isPrime(n):
        n = str(n)
        n = n[::-1]
        n = int(n)
        if isPrime(n):
            return True
        else:
            return False
for i in range(m,n+1):
    if isReversePrime(i):
        print(i,end=' ')

代码解析:

  1. m, n = map(int, input().split()):使用input()函数获取用户输入的一个字符串,然后使用split()方法将其拆分为多个字符串,并使用map()函数将这些字符串转换为整数类型。最终,将这些整数赋值给变量mn
  2. def isPrime(n)::定义一个名为isPrime的函数,用于判断一个数是否为质数。
  3. if n == 1::检查参数n是否等于1,如果是,则返回False,因为1不被视为质数。
  4. for i in range(2, n)::使用range()函数生成一个从2到n-1的整数序列,然后进行迭代,将每个迭代的值依次赋给变量i。该迭代用于检查从2到n-1之间是否存在n的因数。
  5. if n % i == 0::检查n是否能够被当前迭代的值i整除,即判断n是否有其他因数。如果有,则返回False,因为n不是质数。
  6. return True:如果上述循环未找到n的因数,则返回True,表示n是质数。
  7. def isReversePrime(n)::定义一个名为isReversePrime的函数,用于判断一个数是否为反质数。
  8. if str(n) == str(n)[::-1]::将数值n转换为字符串形式,判断该字符串是否与其翻转后的字符串相等。如果相等,意味着n是一个回文数,不满足反质数的条件,返回False。
  9. if isPrime(n)::调用isPrime()函数判断n是否是质数。如果是质数,则进行以下操作,否则直接返回False。
  10. n = str(n):将变量n转换为字符串类型。
  11. n = n[::-1]:使用切片操作将n反转。
  12. n = int(n):将n转换为整数类型。
  13. if isPrime(n)::调用isPrime()函数判断反转后的n是否为质数。如果是质数,则返回True,表示n是反质数;否则返回False。
  14. for i in range(m, n+1)::使用range()函数生成一个从m到n的整数序列(包括n),然后进行迭代,将每个迭代的值依次赋给变量i
  15. if isReversePrime(i)::调用isReversePrime()函数判断当前迭代的值i是否为反质数。如果是反质数,则执行以下操作,否则进入下一次迭代。
  16. print(i, end=' '):打印当前迭代的值i,并以空格结尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值