知識點 線性篩

2021-09-27 01:27:42 字數 2437 閱讀 6433

埃氏篩法過程中,每個數會被其所有質因數篩一遍,導致o(n

logn

)o(nlogn)

o(nlog

n)的複雜度。

for

(int i =

2; i <= n; i++)if

(is_prime[i]&&(

long

long

)i * i <= n)

如果讓每個數隻被其最小的質數篩去,那麼就可以可以去掉log

nlogn

logn

的複雜度.

具體的做法是,從2列舉每個自然數,先確定其是否是質數(並將質數從小到大存在 prpr

pr陣列中),然後找到其最小的質因數lplp

lp。在[ 2,

lp

][2,lp]

[2,lp]

範圍內從小到大列舉所有已篩得的質數prj

pr_j

prj​

,將對應的i⋅p

ri

i\cdot pr_i

i⋅pri​

的最小質因數設為pri

pr_i

pri​

。可以證明這樣是對的,因為pri

pr_i

pri​

小於i的最小質因子,所以i⋅p

ri

i\cdot pr_i

i⋅pri​

的最小質因數只能是pri

pr_i

pri​

vector<

int> pr;

void

sieve_pr()

for(

int j =

0; j <

(int

)pr.

size()

&& pr[j]

<= lp[i]

&& i*pr[j]

<= n;

++j)

lp[i * pr[j]

]= pr[j];}

}

(pc

)f(p^c)

f(pc)即f(p

c∗x)

f(p^c*x)

f(pc∗x

).f (p

c∗x)

=f(p

c)∗f

(x

)f(p^c*x)=f(p^c)*f(x)

f(pc∗x

)=f(

pc)∗

f(x)

篩μ

\muμ

令p

ip_i

pi​為小於i最小質因子的所有質數。根據莫比烏斯函式的定義有:

μ (p

)=−1

μ(pk

)=

0\mu(p)=-1 \\ \mu(p^k)=0

μ(p)=−

1μ(p

k)=0

得 &\mu(p_i*i)=0&\mathrm\ [p_i|i]\\ else&\mu(p_i*i)=-\mu(p_i)& \end

for(

int j =

0; j <

(int

)pr.

size()

&& pr[j]

<= lp[i]

&& i*pr[j]

<= n;

++j)

}}篩φ

\varphi

φ 根據φ(p

)=p−

1ϕ(p

k)=p

k−pk

−1

\varphi(p)=p-1\\ \phi(p^k) = p^k - p^\\

φ(p)=p

−1ϕ(

pk)=

pk−p

k−1有

&\varphi(p_i*i)=\varphi(i)*p_i\ \mathrm\ \ [p_i|i]\\ else&\varphi(p_i*i)=\varphi(i)*(p_i-1) \end

for(

int j =

0; j <

(int

)pr.

size()

&& pr[j]

<= lp[i]

&& i*pr[j]

<= n;

++j)

}}當然時間允許可以直接寫埃氏篩:

φ (n

)=n∏

p∣n(

1−1p

)\varphi(n)=n\prod_\left(1-\frac\right)

φ(n)=n

p∣n∏

​(1−

p1​)

void

geteuler()

}

知識點 線性代數

研究物件 向量 矩陣 行列式 線性 一次形式來表達的 代數 符號替代元素和運算 pdf 線性代數的幾何意義 向量的矩陣表示法,向量的模,單位向量,法向量 在自由向量的意義下,相等的向量都看作是同乙個向量。數學中只研究自由向量。已知兩個非零向量a,b,作oa a,ob b,則 aob稱作向量a和向量b...

多執行緒重要知識點 執行緒同步

當多個執行緒同時共享同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。舉例 兩個視窗同時售賣100張火車票。解決方法 使用多執行緒之間同步或使用鎖 lock 原理 將可能會發生資料衝突問題 執行緒不安全問題 只能讓當前乙個執行...

C 知識點 執行緒2 執行緒管理

執行緒管理就是使用join或detach來管理執行緒。第乙個版本,注意在異常中增加對執行緒的join include include using namespace std void function 1 std cout第二個版本,包一層 include include using namespa...