python中如何判断质数

在Python中,我们可以使用多种方法来判断一个数是否为质数,下面是一些常用的方法:

10年积累的网站设计、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有沧源免费网站建设让你可以放心的选择与我们合作。

1、试除法:从2开始,一直到这个数的平方根,看看这个数能否被其中任何一个数整除,如果能,那么这个数就不是质数;如果不能,那么这个数就是质数。

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

2、埃拉托斯特尼筛法:首先创建一个布尔值列表,表示每个数是否为质数,然后从2开始,将2的倍数标记为非质数,然后找到下一个未被标记的数,将其倍数标记为非质数,重复这个过程,直到遍历完整个列表,列表中值为True的索引对应的数就是质数。

def eratosthenes_sieve(n):
    primes = [True] * (n + 1)
    primes[0] = primes[1] = False
    p = 2
    while p * p <= n:
        if primes[p]:
            for i in range(p * p, n + 1, p):
                primes[i] = False
        p += 1
    return [x for x in range(n + 1) if primes[x]]

3、MillerRabin素性检验:这是一个概率算法,用于判断一个大数是否为质数,它的基本思想是:如果一个数n是合数,那么它可以表示为a*b(a和b都是小于等于sqrt(n)的正整数),那么对于任意一个小于n的正整数a,都有以下两个性质:

a^(n1) ≡ 1 (mod n) 如果a^(n1) 1能被n整除,那么n就不是质数。

a^d * b^e ≡ 1 (mod n) 如果存在d、e使得a^d * b^e 1能被n整除,那么n就不是质数。

import random
def miller_rabin(n, k=5): # number of tests to run
    if n < 6: # insecure for small numbers!
        return [False, False, True, True, False, True][n] # timing attack resistant
    if n & 1 == 0: # even numbers other than 2 are not primes
        return False
    r, s = 0, n 1
    while s % 2 == 0:
        r += 1
        s //= 2
    for _ in range(k):
        a = random.randrange(2, n 1)
        x = pow(a, s, n) # compute a^s % n using modular exponentiation
        if x == 1 or x == n 1:
            continue
        for r in range(1, r): # try r times to find a nontrivial square root of x
            x = pow(x, 2, n) # compute x^2 % n using modular exponentiation
            if x == n 1:
                break else:
                continue
        else: # this means we've failed to find a nontrivial square root of x within r tries
            return False # composite number detected! return false and stop testing further.
    return True # passed all k tests! probably```
以上就是Python中判断质数的几种常用方法,需要注意的是,这些方法并不是绝对准确的,它们都有一定的概率误差,试除法和埃拉托斯特尼筛法的时间复杂度较低,但可能会漏掉一些质数;而MillerRabin素性检验虽然时间复杂度较高,但准确性更高,在实际使用时,可以根据需要选择合适的方法。

新闻名称:python中如何判断质数
文章地址:http://www.shufengxianlan.com/qtweb/news35/257735.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联