python编程实现:从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)

一、编程题目

        从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)。

        (温馨提示,结果可能是2个哦)


二、输入输出样例

        输入样例:5

        输出样例:3 7

       输入样例:44

       输出样例:43

       

    输入样例:-1

    输出样例:输入格式错误,请输入一个大于2的正整数!


三、编程实现

        这个题目的关键点是要考虑最接近n的素数有可能不止1个。因此要在n两边进行素数的查找,并输出与n距离最近的一个或两个素数。

   1、首先判断一个数是否是素数,很简单,只要判断是否只能被自身整除。   

import math

def isPrime(num):
    '''
     判断一个数是否是素数
    '''
    for i in range(2,int(math.sqrt(num))+1):
        if num % i == 0:
            return False
    return True

     2、以输入的正整数n为起始点,分别向小于n和大于n的两个方向循环查找,直到找到素数为止,如果左边先找到,则左边找到的素数最接近n,如果右先找到,则右边找到的素数最接近n,如果左右先同时找到,找到的素数都是最接近n的。

def findPrimeCloseN(n):
    '''
     查找与n最接近的素数
    '''
    distance = 1
    result = []
    while (n-distance)>=2:
        if isPrime(n-distance):
            result.append(n-distance)
        if isPrime(n + distance):
            result.append(n + distance)

        if result:
            break

        distance+=1
    return result

        这里定义一个distance表示向n左边和右边移动的距离,每次循环移动1步,然后判断当前这个数是否是素数,因为可能有两个最接近的素数,所以定义了一个result列表来存储。由于每次循环左右两边移动的距离是一样的,所以只要在左右两边找到一个或两个就是最近的,此时结束循环即可。

3、获取用户输入,判断用户输入的数字是否是合法的,不合法提示,合法则调用上面的方法,输出结果。

n = int(input())
if n<=2:
    print('输入格式错误,请输入一个大于2的正整数!')
else:
    result = list(map(str,findPrimeCloseN(n)))
    print(' '.join(result))

      这里注意,因为findPrimeCloseN方法返回的结果是Int类型的列表,这里转为str字符串类型的,因为join方法只只支持字符串类型的列表。


四、测试代码

        

python怎样要求输入正整数 python输入正整数n_接近

python怎样要求输入正整数 python输入正整数n_素数_02

 

python怎样要求输入正整数 python输入正整数n_字符串_03

 

python怎样要求输入正整数 python输入正整数n_素数_04