判断质数(素数) Python

首先是来自百度百科中质数的定义:

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

那么怎么使用程序去判断一个数,是否是质数。

初始版本:

最原始的判断方法就是用for循环遍历每一个数,这种方法固然可行,但是如果用来A题,恐怕解题速度不太理想。

升级版本:

细想一下,1*33*1是不是一回事,所以我们循环判断这个数是不是质数的时候,只需要循环到这个数的开方即可

import math
math.sqrt(n)

最终版本:

再观察一下,除了23,所有的质数都在6的倍数附近,要么是6-1,要么是6+1;

6n+(0):一定可以被3整除
6n+2:一定可以被2整除
6n+3:一定可以被3整除
6n+4:一定可以被2整除
只有6n+16n+5(即6n-1)是不确定的。

所以在执行循环之前,可以先判断一下这个数是否是6n+1或者6n-1;即(n+1)%6和(n-1)%6是否等于0。

最终代码如下:

def isPrime(n):
    if n <= 3:
        return n >= 2
    else:
        if (n + 1) % 6 != 0 and (n - 1) % 6 != 0:
            return False
        for i in range(2, int(math.sqrt(n)) + 1):	# math.sqrt返回值是浮点型,所以要加一个int()
            if n % i == 0:
                return False
    return True

如果大佬有更好的想法或者思路,欢迎补充!

猜你喜欢

转载自blog.csdn.net/weixin_44289959/article/details/111240159