【Python】判断素数的三种方法以及for-else语句的介绍

文章介绍了三种判断一个数是否为素数的方法:暴力枚举法,通过自定义函数is_prime;使用Python内置库sympy的isprime()函数;以及优化时间复杂度的方法,仅检查6的倍数加减1。展示了编程技巧和算法优化的应用。
摘要由CSDN通过智能技术生成

4b0e7be7561645748c4514a6300bfada.png

题目

输入一个数,如果是素数就输出"Yes",否则输出"No"

方法一:暴力枚举法

def is_prime(x):
    if x<2:
        return False;
    for i in range(2,x):
        if x%i==0:
            return False
    return True
n=int(input())
if is_prime(n):
    print("Yes")
else:
    print("No")

自定义函数is_prime(),首先排除小于2的数,然后再对该数之前的数进行枚举,当遇到能被当前的数整除时返回False,若没有数能将其整除意味着这个数是素数,返回True。然后对返回的结果进行判断从而输出"Yes"或"No"

当然,我们可以省去最后if-else的判断,直接在函数is_prime()里来输出"Yes"或"No"

def is_prime(x):
    if x==1:
        print("No")
        return
    for i in range(2,x):
        if x%i==0:
            print("No")
            break
    else:
        print("Yes")
n=int(input())
is_prime(n)

for-else语句

在上面的代码中,我采用了for-else语句,这是一个比较特殊的语句。当for循环正常结束时,else也会执行,而当for循环未正常结束,例如使用break提前退出时,则不会执行。使用这个语句往往可以减少代码量,避免使用flag。

方法二:内置函数

import sympy
n = int(input())
if sympy.isprime(n):
    print("Yes")
else:
    print("No")

使用python自带的sympy库中的isprime()函数仅需一行就能判断素数

方法三:优化了时间复杂度

import math
def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    for i in range(5, int(math.sqrt(n)) + 1, 6):
        if n % i == 0 or n % (i + 2) == 0:
            return False
    return True

优化后的代码利用了以下观察:

1.所有的素数都是6的倍数加减1(除了2和3)。
2.如果n可以整除2或3,它肯定不是素数。
3.如果n不是2或3的倍数,并且不能整除6的倍数加减1的数,那么它也不是素数。所以可以只在6的倍数加减1的数中进行枚举,跳过其他数字。这样可以减少循环的次数,提高效率。 

  • 22
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值