标题:有没有更好的求质数办法
只看楼主
鸡你太美666
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-2-29
结帖率:0
 问题点数:0 回复次数:1 
有没有更好的求质数办法
质数 = []
def 求质数(到几):
    a = 1
    b = 1
    c = 0
    for x in range(1, 到几 + 1):
        c = 0
        a = a + 1
        for x in range(1, a + 1):
            if a % b == 0:
                c = c + 1
            b = b + 1
        if c == 2:
            质数.append(a)
        b = 1
        c = 0
    print(质数)
求质数(10000)
搜索更多相关主题的帖子: print for 办法 质数 if 
2020-02-29 15:39
傻眼猫咪
Rank: 2
等 级:论坛游民
威 望:1
帖 子:38
专家分:85
注 册:2021-8-2
得分:0 
希望對你有幫助,以下代碼可以正常列印出100,000以內的所有質數,或判斷某超大數(至少為1,000,000,000,000,000)是否為質數

程序代码:
def isPrime(n, k=5): # 運用米勒-拉賓質數判定法,簡單說就是刪除法,判斷參數是否為質數
    from random import randint
    if n < 2: return False # 小於2都不是質數,就不用往下執行了
    for p in [2,3,5,7,11,13,17,19,23,29]: # 運用小質數把非常大的質數變小,節省運算時間和記憶體
        if n % p == 0: return n == p
    s, d = 0, n-1
    while d % 2 == 0: # 運用偶數刪除法,因為除了2本身偶數以外,全部質數都是奇數
        s, d = s+1, int(d/2)
    for i in range(k): 
        x = pow(randint(2, n-1), d, n) # 假設p和q為質數,p!=q,如果n=p*q,那麼p或q肯定有一方小於平方根(n)
        if x == 1 or x == n-1: continue
        for r in range(1, s):
            x = (x * x) % n
            if x == 1: return False
            if x == n-1: break
        else: return False
    return True

def prime(num): # 這裡是根據你的題目所定制的函數,找出所有num以內的質數
    for i in range(num+1):
        if isPrime(i):
            yield i # 切記!這裡我不是用return,如要得到所有輸出質數,必須加上list,set或tuple...

print(list(prime(100000))) # 用list把所有質數列出


[此贴子已经被作者于2021-8-2 18:58编辑过]

2021-08-02 18:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499475-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071616 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved