**:yinthewind的部落格
這兩天看到了線性時間篩選素數,覺得它的擴充套件很神奇= =
先來基本的
#define n 10000000
int prime[n],p;
bool iscomp[n+1];
void primetable()
for(int j=0;jcnt[i]的值即為 i 的素因子個數.
求因子的個數:
#include
#define n 1000010
using namespace std;
int prime[n],p;
int cnt[n];
int div[n];
bool iscomp[n];
void primetable4()
for(int j=0;j
後記:結合線性篩素數演算法的優化演算法
基於這個線性篩素數演算法,我們可以很容易地得到某個數的最小素因子。
因為當i%pr[j]!=0的時候,最小素因子pr[j]與i互質,滿足積性函式的條件,可以直接得到f(i*pr[j])=f(i)*f(pr[j]).
不過當i%pr[j]==0時我們必須根據該積性函式本身的特性進行計算.或者在篩的同時儲存並遞推些附加資訊.總之要o(1)求得f(i*pr[j])及完成遞推附加資訊.
上面介紹的兩個則是最常用的,其實還可以有很多擴充套件,這裡就不談了....
素數篩法(素數篩 線性篩)
求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...
素數線性篩
ps 證明 神牛部落格。include include using namespace std const int n 100100 int v n p n n,m,tot int main 首先,先明確乙個條件,任何合數都能表示成一系列素數的積。不管 i 是否是素數,都會執行到 關鍵處1 如果 i...
線性篩素數
如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問該數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每乙個詢問的結果。in...