關於線性篩的一些思考

2022-05-07 23:18:19 字數 859 閱讀 2407

memset(is_prime,true,sizeof(is_prime));

is_prime[0]=is_prime[1]=false;

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

}

這是**

思考幾個問題

1.它是怎樣達到o(n)的?

2.為什麼i%prime[j]時應該break

首先,達到o(n)的原理————————每乙個數隻會被唯一的乙個數給篩掉

如12會被6篩掉 18會被9篩掉

具體來說,x會被x/d篩掉,d是x的最小的質因數

舉例來說

\(12\longrightarrow6\longrightarrow3\longrightarrow1\ \ \ \ \ 3*2*2=12\)

\(18\longrightarrow9\longrightarrow3\longrightarrow1\ \ \ \ \ 3*3*2=18\)

\(180\longrightarrow90\longrightarrow45\longrightarrow15\longrightarrow5\longrightarrow1\ \ \ \ \ 5*3*3*2*2=180\)

顯然這種劃分的方式是唯一的。

為了實現這個功能

便有了

if(i%prime[j]==0)break;
這樣一句話

比如4的時候,4%2==0,不會再去用4去篩掉12

而是等到6再去用6篩掉12

這是因為發現了4的最小質因數為2,於是就不考慮用更大的質因數了

所以直接break即可

扯完這些基本理論後再來說說怎麼用線性篩去篩一些常見的函式

線性篩的一些應用

線性篩,別名尤拉篩,因可以在o n 的時間裡篩出1 n的素數而得名。板子 int cnt,prime n bool is prime n void euler sieve return 然後它其實還可以用來求約數個數和約數和。預備知識 我們設d i 表示i的約數個數,那麼d i j d i d j ...

線性回歸的一些思考(SVM)

1 對於線性回歸模型的代價函式,為了能應用求導來求其最小值 代價函式可導 不能用錯誤的分類個數作為代價函式 不可導 又或者用s函式 非凸函式,不能應用梯度下降,轉化為log凸函式 簡單的做法就是轉化為距離 統計學習方法書中提到的 或者機器學習課堂上講到的幾種形式,這些形式都可導。2 線性模型中,對於...

線性回歸的一些思考(SVM)

線性回歸的一些思考 svm 1 對於線性回歸模型的代價函式,為了能應用求導來求其最小值 代價函式可導 不能用錯誤的分類個數作為代價函式 不可導 又或者用s函式 非凸函式,不能應用梯度下降,轉化為log凸函式 簡單的做法就是轉化為距離 統計學習方法書中提到的 或者機器學習課堂上講到的幾種形式,這些形式...