如何判斷一個數是不是質數

質數是指只能被1和自己整除的正整數,例如2、3、5、7、11、13等等。判斷一個數是否為質數是數學中的基本問題之一,本文將介紹多種方法來判斷一個數是否為質數。

一、試除法

試除法是最基本的一種方法,其思路是嘗試用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

對於傳入的n,首先判斷其是否小於等於1,因為1不是質數。然後用一個循環從2到n的平方根來逐個判斷是否可以整除n,如果可以整除,那麼n就不是質數,直接返回False;否則n就是質數,返回True。

二、埃氏篩法

埃氏篩法是一種非常高效的篩選質數的方法,它的思路是從2開始,將所有能被2整除的數標記為合數,然後再以3為起點,將所有能被3整除的數標記為合數。不斷重複這個過程,就能將小於等於n的質數全部篩選出來。

def eratosthenes(n):
    if n <= 1:
        return []
    nums = [i for i in range(2, n+1)]
    i = 0
    while i = len(nums):
            break
    return nums

對於傳入的n,首先判斷其是否小於等於1,因為1不是質數。然後初始化一個數組nums,用於存儲2到n的所有整數。接著用一個循環,依次取出數組中的每個質數p,然後將所有能被p整除的數從數組中刪除,最後返回剩下的數組即為所有小於等於n的質數。

三、費馬小定理

費馬小定理是一種用於判斷質數的數論定理,其核心思想是通過快速冪來進行模運算,從而判斷一個數是否為質數。

def is_prime_fermat(n, k=5):
    if n <= 1:
        return False
    if n == 2 or n == 3:
        return True
    for i in range(k):
        a = random.randint(2, n - 2)
        if pow(a, n - 1, n) != 1:
            return False
    return True

對於傳入的n,首先判斷其是否小於等於1,因為1不是質數。然後判斷n是否等於2或3,如果是,則n為質數。接著進行k次隨機測試,每次隨機選擇一個2到n-2之間的整數a,判斷是否滿足a^(n-1) ≡ 1 (mod n),如果所有的測試都通過了,那麼n就可能是質數,返回True。注意,這裡的k表示進行測試的次數,k越大,誤判為質數的概率就越小。

四、米勒-拉賓素數檢驗

米勒-拉賓素數檢驗是一種基於費馬小定理進行改進的演算法,其思路是先將n-1分解成2^s * t的形式,然後隨機選擇一個2到n-2之間的整數a,計算a^t mod n的值,如果等於1或n-1,那麼n可能是質數。否則,不斷將a^t mod n進行平方運算,並檢查結果是否等於n-1。如果能夠通過k次測試,那麼就認為n是質數。

def miller_rabin(n, k=5):
    if n <= 1:
        return False
    if n == 2 or n == 3:
        return True
    if n % 2 == 0:
        return False
    s = 0
    t = n - 1
    while t % 2 == 0:
        t //= 2
        s += 1
    for i in range(k):
        a = random.randint(2, n - 2)
        x = pow(a, t, n)
        if x == 1 or x == n - 1:
            continue
        for j in range(s - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

對於傳入的n,首先判斷其是否小於等於1,因為1不是質數。然後判斷n是否等於2或3,如果是,則n為質數。接著判斷n是否為偶數,如果是,則n不是質數。然後將n-1分解成2^s * t的形式,其中t是奇數,s是非負整數。接著進行k次隨機測試,每次隨機選擇一個2到n-2之間的整數a,計算a^t mod n的值,如果等於1或n-1,那麼繼續下一輪循環。否則,不斷將a^t mod n進行平方運算,並檢查是否等於n-1。如果k次測試都通過了,那麼n可能是質數,返回True。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243848.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:58
下一篇 2024-12-12 12:58

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python如何判斷質數和異常處理

    本文主要介紹Python如何判斷質數和異常處理,其中包括多個方面的內容。 一、判斷質數 1、定義:質數是指除了1和它本身兩個因數外,沒有其他的因數。 2、判斷方法: (1)從2到n…

    編程 2025-04-29
  • Python如何判斷工作日與節假日

    在Python編程中,判斷工作日與節假日是非常常見的需求。下面將從多個方面進行詳細的闡述。 一、datetime庫介紹 datetime是Python中處理日期和時間的標準庫。使用…

    編程 2025-04-29
  • Python計算中文字元個數

    本文將從多個方面對Python計算中文字元個數進行詳細的闡述,包括字元串長度計算、正則表達式統計和模塊使用方法等內容。 一、字元串長度計算 在Python中,計算字元串長度是非常容…

    編程 2025-04-29
  • Python中如何判斷字元為數字

    判斷字元是否為數字是Python編程中常見的需求,本文將從多個方面詳細闡述如何使用Python進行字元判斷。 一、isdigit()函數判斷字元是否為數字 Python中可以使用i…

    編程 2025-04-29
  • 編程找出100以內的質數並求和

    本文將會介紹如何使用編程語言找出100以內的所有質數並求和。而質數,指的是只能被1和它本身整除的數字。 一、判斷質數的演算法 要找出100以內的質數,首先要搞清楚什麼是質數,以及如何…

    編程 2025-04-28
  • Python實現統計100以內能被7整除的數字個數

    本文將從以下幾個方面詳細闡述如何使用Python來實現統計100以內能被7整除的數字個數。具體內容包括: 一、range函數 Python中的range函數是用來生成一個數字序列的…

    編程 2025-04-28
  • Python計算個數函數用法介紹

    本文將對Python中計算個數的函數進行詳細講解,包括內置函數、常用模塊和自定義函數,並給出完整的代碼示例。 一、內置函數 Python內置了多個計算個數的函數,包括len()、c…

    編程 2025-04-28
  • Python3個數中的最大數的查找方法

    Python是一種高級編程語言,擁有易學易用、可移植性強、高效極速等優勢,被廣泛應用於數據分析、Web開發、人工智慧等多個領域。在Python中,查找給定數列表中的最大數是一個非常…

    編程 2025-04-28
  • Python中一次輸入兩個數

    在Python中,一次輸入兩個數是一種常見的需求。本文將從多個方面闡述Python中一次輸入兩個數的實現方法。 一、input函數 Python中的input函數可以接受用戶輸入的…

    編程 2025-04-28

發表回復

登錄後才能評論