请定义一个函数,实现判断一个数是否是超级素数,并输出判断的结果。
一、编程题目
我们都知道,素数是除了1之外只能被自身整数的数,1除外。如果一个素数,去除一位、两位或多位后依然是素数,则我们称该素数为超级素数。
请定义一个函数,实现判断一个数是否是超级素数,并输出判断的结果。
二、输入输出样例
输入样例:12
输出样例:12 不是一个超级素数
输入样例:373
输出样例:373 是一个超级素数
输入样例:10.2
输出样例:输入格式错误,请输入一个整数!
三、代码实现
1、首先定义一个函数,用于判断一个数是否是素数,素数是大于1的数,且只能被自身和1整除。
import math
def isPrime(n): # 判断一个数是否是素数
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
在上面这个代码中,我们定义了一个叫isPrime的函数,如果数字小于2直接返回false,否则判断2到根号n 再加1之间的数能不能被n整除,这里要注意的就是,不用从2到n进行判断,因为如果根号n再加1都无法整除,那么后面的数字更是无法整除,从而可以减小循环的判断,加快执行的速度。
2、定义一个判断是否是超级素数的函数,用于判断一个数每去掉一位是否还是素数。
def isSuperPrime(n): # 判断一个数是否是超级素数
n_str = str(n)
for i in range(len(n_str)):
cur_n = n_str[:len(n_str)-i] #从个位开始去掉一个数之后判断是否依然是素数
if not isPrime(int(cur_n)):
return False
return True
上面的代码中,我们定义了一个isSuperPrime函数,因为要判断这个数每去掉一位是否是素数,因此我们把这个数转为字符串类型,方便处理,因为字符串类型的数据可以通过切片的方式对每一位进行截取。
我们循环这个数字的长度,从个位数开始截取,每次去掉一位,看剩余的数字是否还是素数,判断方法就是直接调用之前写好的判断素数的方法,如果不是素数,则循环结束,这个数就不可能是超级素数,否则一直循环判断完毕,如果最后都满足素数,则该数字是一个超级素数,最后返回True
3、在主函数中,实现输入和判断,并输出判断的结果
if __name__ == '__main__':
n = input('请输入一个整数:')
try:
n = int(n)
if isSuperPrime(n):
print('{} 是一个超级素数!'.format(n))
else:
print('{} 不是一个超级素数!'.format(n))
except:
print('输入格式有误,请输入一个整数!')
我们通过input获取输入的数字,然后转为int,如果输入的数字格式不对,比如输入的是小数,那么转int就会报错,报错了就提示输入格式有误,否则调用判断超级素数的方法,判断该数字是否是超级素数,是的话,输出是超级素数,否则输出不是超级素数。
四、测试
1、输入数字:12
2、输入数字:373
3、输入0.23