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