質數相關知識點詳解

2022-03-20 06:09:52 字數 1827 閱讀 6706

上課!!定義:若乙個正整數無法被除了1和它自身之外的任何數整除,則稱該數為質數(或素數)。否則稱該數為合數。

我們需要明確,整個自然數集合中,質數的分布比較稀疏,對於乙個足夠大的整數\(n\),不超過它的質數大約有\(\frac\)個,換句話說,就是每\(ln n\)個數中大約有1個質數。

我們需要明確,計算機最優秀的地方在於機械地重複同一件事,針對質數的判定,正好是它的「強項」,我們只需要按照定義入手,列舉從2到n的所有數,如果能整除,就返回false,試到最後還不能的話就返回true。

模板:

bool prime(int n)

\)即可。

模板:bool prime(int n)

質數的篩選就是給定數\(n\),要求找出從1到\(n\)的所有質數。質數的篩選是信競中很重要的研究課題,也是一些基礎數學題的重要解題模型。

eratosthenes篩法即埃斯托拉特尼篩法,簡稱埃氏篩法。它基於這樣的思路:

任意整數的倍數都不是質數

基於這樣的想法,我們就從2開始從小到大列舉每個數\(x\),並把它小於\(n\)的倍數全部打上標記,當我們掃瞄到乙個數的時候,如果它還未被標記,它就是個質數。

這種篩法極好理解,但是效率較低,我們可以拿紙筆模擬,然後就能夠發現,有一些數是多個質數的倍數,這樣的話它就會被反覆篩好幾遍(比如說6),這樣雖然對正確答案不會造成影響,但卻影響程式執行的效率。所以我們對埃氏篩法進行優化:

對於每個數\(x\),我們從\(\)開始標記,把\(\),\((x+1)\cdot x\),\(\cdots\),\(\frac\cdot x\)打標記即可。

優化後模板:

void estorathenes(int n)

}

euler篩法即尤拉篩法,也叫快篩,線性篩法。是信競中最常用的質數篩法,以偉大的數學家尤拉的名字命名,建議大家熟練掌握。

上述的埃氏篩法即便在優化後也會重複標記,雖然已經少了很多重複,但還是不夠快速。比如,12既會被2標記也會被3標記,因為\(12=6\times 2=4\times 3\).為什麼會出現這種情況呢?因為我們在按照埃氏篩法篩選的時候,並沒有找出確定12的唯一方式,導致12的重複遍歷不可避免。

按照這個基礎,出現了快篩演算法,它的基本思想是這樣:我們在生成乙個需要被標記的合數的時候,每次只向現有的數中乘上這個合數的最小質因子,這樣一來,合數的質因子便被從小到大地累計起來,那剛才的12來說,它就被唯一分解成\(3\times 2\times 2\)。

這個演算法的時間複雜度是\(o(n)\)的。

歐氏篩法模板:

void euler(int x)

}}

這個定理hin重要!!!

整數的唯一分解定理:任何乙個大於1的整數都可表示為若干個質數的乘積,表示如下:

\[=^}\cdot^}\cdot \cdots \cdot^}

\]即:

\[=\prod_^^

\]所以我們通過如上定理分析出質因數分解在計算機上的實現:

先從2到\(\sqrt\)掃瞄所有整數\(x\),如果\(x\)能整除\(n\),那麼就在因子表上加上它,並用\(n\)一直除\(x\),每次除就在指數表c陣列中++,一直到除不盡為止。

**實現:

void divide(int n)

while(n%i==0)

n/=i,c[cnt]++;

}if(n>1)

prime[++cnt]=n,c[cnt]=1;

}

C new delete相關知識點詳解

每個程式在執行時都占用一塊可用的記憶體空間,用於存放動態分配的物件,此記憶體空間稱為程式的自由儲存區 free store 或堆 heap c語言用一堆標準庫函式malloc和free在自由儲存區中分配儲存空間,而c 則用new和delete表示式實現相同的功能。一 new和delete建立和釋放動...

約數相關知識點詳解

本篇隨筆講解資訊學奧林匹克競賽中數學部分的約數相關知識點。大體包括 整數唯一分解定理的推論,求 n 的正約數集合,篩選 1 n 每個數的正約數集合。需要讀者有不低於高中一年級的數學素養及一定的邏輯推理能力。本篇隨筆將不再對一些基本定理和數學知識 概念進行講解,有需要的同學請自行補習。通過質數相關知識...

知識點4 素數 質數

4.注意點 5.題型訓練 6.參考資料 素數又稱質數,是指除了1和本身之外,不能被其他數整除的一類數,反之,則稱為合數。注意 小於等於1的數既不是素數,也不是合數。本節將解決兩個問題 如何判斷給定的正整數n是否是質數 如何在較短的時間內得到1 n內的素數表。解法一 暴力。由素數的定義可以遍歷從2 n...