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凸函式 簡單的做法就是轉化為距離 統計學習方法書中提到的 或者機器學習課堂上講到的幾種形式,這些形式...