線性篩以及尤拉函式和莫比烏斯函式

2021-10-22 11:56:29 字數 824 閱讀 8725

首先線性篩在篩素數時比埃氏篩快3到4倍(在資料較小時比後者稍慢,據說是由於模運算的緣故)

線性篩的基本思想就是對於每乙個合數只被篩一次而且只會被最小質因數篩掉。

**如下:

for(int i=2;i<=maxn;i++)

}

公式:

這種形式的計算式更容易算一點。 

當x為素數時,phi(x)=x-1;

當p能整除x時,phi(x*p)=phi(x)*p

基於上述討論,我們能用線性篩得出尤拉函式的值。

**如下:

for(int i=2;i<=maxn;i++)

}

我們在這裡使用和上文篩尤拉函式類似的分類討論: (設p為素數)①μ(p)=-1②已知μ(x),且p能夠整除x,則μ(x*p)=0

③已知μ(x),且p不能夠整除x,則μ(x*p)=-μ(x)三個結論的證明比上文的euler要簡單很多——只需要照著莫比烏斯函式的定義去討論0,1,-1三種情況就是了。

【線性篩】 - 大公尺餅 -

尤拉篩(線性篩)求莫比烏斯函式

篩法我們肯定都不陌生,用來求一定序列內素數個數的方法麻,但在學習完埃氏篩法後 如果沒學過可以去學一下再看 我們發現它似乎做了很多多餘的操作,乙個數會被他的質所有篩 一遍,但我們本質上篩一遍就夠了,所以我們有沒有什麼方法去優化它呢?尤拉篩隨之而出,尤拉篩的特點便是乙個數隻會被它的最小質因子篩一遍,其它...

尤拉篩 尤拉函式 莫比烏斯函式

通過已知素數及當前自然數篩掉後面的合數。同時讓每乙個合數只被篩去一次,摒棄重複的篩除操作。兩個陣列 乙個vis,乙個prime。迴圈從2開始,直到所給的上限n處 或者直接maxn 無論當前數是否是質數,都要進行後續合數的處理!篩除時要利用已有的素數。素數規模 趨近於xln x displaystyl...

線性篩素數 尤拉函式 莫比烏斯函式

常用的兩種素數篩法見部落格 http 這裡詳講線性篩,演算法複雜度o n 這個演算法的核心思想是 每乙個合數可以被唯一地表示成它的乙個最小質因子和另外乙個數的乘積。證明略。先上 const int n 1000000 int phi n prime n mu n bool vis n void in...