python编程:判断一个数是否是超级素数

时间:2021-08-02 01:07:44

请定义一个函数,实现判断一个数是否是超级素数,并输出判断的结果。

一、编程题目

        我们都知道,素数是除了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

python编程:判断一个数是否是超级素数

2、输入数字:373

python编程:判断一个数是否是超级素数 

 3、输入0.23

python编程:判断一个数是否是超级素数