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

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方法只只支持字符串类型的列表。


四、测试代码

        

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光宅男xxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值