素數方面知識整理

2021-10-25 18:50:10 字數 1080 閱讀 3717

一、判斷素數

int

judge

(int n)

return1;

}

注意:以上**中,for迴圈的結束條件是 i <= n/i,相當於i <= sqrt(n),兩種寫法都可以,只不過呼叫sqrt()函式會慢一些,因為for迴圈每次迴圈都會呼叫該函式。另外,不能寫成i * i <= n

因為當n很接近int的最大值時,i*i可能會溢位。

參考文章

二、埃氏篩(埃拉託斯特尼篩法,簡稱埃氏篩)

應用:求1到n之間的所有素數

暴力求法,遍歷[1,n]中所有的數,每次呼叫判斷素數的函式,這種方法,不用說也知道太浪費時間

埃氏篩的思想:乙個合數一定能被分解為幾個質數的冪的乘積

並且這個數的質因子一定是小於它本身的,所以當我們從小到大將每個質數的倍數都篩去的話,當遍歷到乙個合數時,它一定已經被它的質因子給篩去了。

比如:

4=2*2

6=2*3

105=3*5*7

const

int maxn=

10000000

;int a[maxn]=;

inte_sieve

(int n)

}}

可以對埃氏篩進行優化

1.我們會先篩除2的倍數,然後篩除3的倍數,但是當3篩除6、12、18...時,它們已經被2篩除過了,所以進行了

重複的操作。所以我們可以從i * i開始篩,因為i*2,i*3,i*5...等已經被2*i,3*i,5*i...篩除了。

2.判斷乙個數是不是素數,只要判斷在[2,sqrt(n)]之間有沒有它的質因子。

const

int maxn=

10000000

;int a[maxn]=;

inte_sieve

(int n)

}}

三、尤拉篩(線性篩)

算了,我不寫了,直接去膜拜大佬吧

這是大佬

推薦

nginx日誌方面知識整理

1.預設日誌內容介紹 預設的示例 注釋 remote addr 與 http x forwarded for 用以記錄客戶端的ip位址 remote user 用來記錄客戶端使用者名稱 time local 用來記錄訪問時間與時區 request 用來記錄請求的url與http協議 status 用...

jquery 方面知識

當需要取得 其中一行時 var items tr typeitemdata size 判斷 中是否有資料。tr td nth child 5 typeitemdata each function i,v 通過each函式讀取一行中第一列的值。mytrs live click function els...

迴圈方面的知識簡述

概念 什麼是迴圈 重複性的操作 四要素 1 迴圈變數的宣告和初始化 2 迴圈條件的構建 3 迴圈體 4 迴圈變數的更新 使用迴圈去解決問題 1 是否存在重複性 2 如果存在,確定四要素 3 選擇迴圈的結構,套用其語法 while 和 do while迴圈次數不確定的迴圈 while先判斷後執行 do...