篩法與質數表

2021-09-11 22:42:07 字數 3031 閱讀 6604

給出乙個自然數表(1,2,…,n),要求盡可能快的找出其中的質數,應該怎麼做?

有兩種思路:一種是遍歷,乙個個找質數,一種是去掉所有的合數.那麼選擇哪一種呢?

不管怎樣,先來看看如何判定質數或者合數.

質數和合數的判定

質數和合數的定義在這不多講.為判斷是質數還是合數,最經典的方案就是遍歷小於該數的所有整數(除了1),如果出現整除,那就不是.

就像這樣:

while(i=2;i但這樣需要掃瞄n-1次,對於大數而言要花相當多的時間,顯然不是優解.那麼在這裡引入乙個定理:

t he

orem

:∀x∈

z且x是

合數∃1

≤a≤x

使得a∣

x\\ \forall x\in\mathbb且\ x是合數\\ \exists 1\le a\leq \sqrt \\使得 a|x

theore

m:∀x

∈z且x

是合數∃

1≤a≤

x​使得

a∣x對該定理用反證法證明:

p ro

of:f

or合數

x,∃整

數對(a

,b),

ab˙=

x.(a

!=0a

ndb!

=0)i

fa

nd

b

ab

˙

原假設不

成立.q

.e.d

\\ for 合數x,\\ \exists 整數對(a,b),a\dot b=x.(a!=0 and b!=0)\\ if a< \sqrt\ and\ b< \sqrt\\ \rightarrow a\dot b < x\\ \therefore 原假設不成立.\\ q.e.d

proof:

for合

數x,∃

整數對(

a,b)

,ab˙

=x.(

a!=0

andb

!=0)

ifaandb

→ab˙

原假設不

成立.q

.e.d

所以現在提出第乙個改進:

只用掃瞄到x

\sqrt

x​即可判斷是否為質數.

篩法結合上一部分,下面提出乙個在自然數表中找出質數表的乙個改進方法:

在x

\sqrt

x​範圍內找出質數;

清除這些質數的整數倍;

完成.

清 除所

有質數的

整數倍⟺

清除所有

合數

清除所有質數的整數倍\iff 清除所有合數

清除所有質數

的整數倍

⟺清除所

有合數二者是等價的嗎?

下面是解釋:

自然的,是乙個整數的整數倍的數一定是合數.所以若清除了所有的合數必然清除所有質數的整數倍.由此必要性得證.

下面是充分性:

先引入乙個定理:

t he

orem

:∀x∈

n+x=

∏i=1

nai,

ai∈n

+且ai

是質

數\\ \forall x \in\mathbb\\ x=\prod_^\ a_i,\\ a_i\in\mathbb且a_i是質數

theore

m:∀x

∈n+x

=i=1

∏n​a

i​,a

i​∈n

+且ai

​是質數

下面是證明:

p ro

of:對

於質數a

,可分解

為1a˙

,成立.

對於合數

b,一定

可以分解

為∏i=

1nmi

,mi∈

n+對於

mi,若

為質數,

則分解停

止.若為

合數,則

按照上一

條,可以

分解為∏

i=1n

mi′,

mi′∈

n+以上

過程均成

立直到m

ik均為

質數

.對於質數a,可分解為1\dot a,成立.\\ 對於合數b,一定可以分解為\\ \prod_^\ m_i,m_i\in\mathbb\\ 對於m_i,若為質數,則分解停止.\\若為合數,則按照上一條,可以分解為 \prod_^\ m'_i,m'_i\in\mathbb\\ 以上過程均成立直到m^_i均為質數.

proof:

對於質數

a,可分

解為1a

˙,成立

.對於合

數b,一

定可以分

解為i=

1∏n​

mi​,

mi​∈

n+對於

mi​,

若為質數

,則分解

停止.若

為合數,

則按照上

一條,可

以分解為

i=1∏

n​mi

′​,m

i′​∈

n+以上

過程均成

立直到m

ik​均

為質數.

於是∀ais

合數∃m

is質數

m∣

a\forall a\ is\ 合數\\ \exists m\ is\ 質數\\ m|a\\

∀ais合數

∃mis

質數m∣

a充分性得證.

那麼:按照這個方法進行質數的篩選,有:

for(a=1;a<=sqrt(x);a++)

} else

}

就是這樣了.

質數中的質數(質數篩法)

如果乙個質數,在質數列表中的編號也是質數,那麼就稱之為質數中的質數。例如 3 5分別是排第2和第3的質數,所以他們是質數中的質數。現在給出乙個數n,求 n的最小的質數中的質數是多少 可以考慮用質數篩法來做 input 輸入乙個數n n 10 6 output 輸出 n的最小的質數中的質數。input...

普通質數篩法

二 埃氏篩 三.尤拉篩法 4.質數距離 從暴力的直接迴圈開始,一步步對演算法進行優化,一步步簡化時間複雜度,並盡可能討論各種篩法的優劣,以及其中每一步的意義。思路直接,容易被像我們這樣的新手第一時間想到,乙個質數,除了1和它本身以外不再有其他因數,那麼想知道乙個數是不是質數,乾脆直接去看看它有幾個因...

質數線性篩法 O n

埃氏篩法o nloglogn 仍會重複標記合數 such as i 2時 12 2 6,先會被 2 標記已是合數 i 3時 12 3 4,又被標記了一次 我們在生成乙個需要標記的合數時,每次只向現有的數中乘上乙個質因子,並且讓它是所生成合數的最小質因子 code include include us...