求素數 sdut oj 1468(尤拉篩)

2021-07-15 18:43:41 字數 709 閱讀 7734

time limit: 100ms   memory limit: 65536k  有疑問?點這裡^_^

求小於n的所有素數的數量。

多組輸入,輸入整數n(n<1000000

),以0

結束。

輸出n以內所有素數的個數。

10

0

4

///wa了好久的題0.0 今天突然想起來了0.0 不能直接求素數的個數 會超時 

///首先需要預處理,利用尤拉篩原理預處理 bool 陣列儲存是否為素數 最後遍歷加和輸出素數的個數 

///accode

#include #include using namespace std;

const int maxn = 1000010;

int prime[maxn];

bool vis[maxn] = ; ///vis=0 是素數

void oula_prime()

} }

int sum = 0;

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

prime[i] = sum; }}

int main()

{ int n;

oula_prime();

while(cin>>n&&n)

{ cout<

進一步降低了尤拉篩的時間複雜度o(nlogn)

尤拉篩法求素數

尤拉篩法通過不篩除篩除過的數來將時間複雜度優化到 尤拉篩法求素數 首先,我們知道當乙個數為素數的時候,它的倍數肯定不是素數。所以我們可以從2開始通過乘積篩掉所有的合數。將所有合數標記,保證不被重複篩除,時間複雜度為o n 比較簡單 求小於等於n的素數的個數 include includeusing ...

尤拉篩法求素數

埃氏篩法確實大大提高了求素數的效率,但是會有很多合數被重複刪去,在資料大小超過1e8的時候會支撐不住。尤拉篩法便有效先看 解決了這個問題,將時間複雜度降低到了o n 先看 int ans 0,pri max n 尤拉篩法 bool vis max n void getpri vis i pri j ...

數論 素數 素數相關基礎 尤拉函式與尤拉定理

尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...