素數篩法(模板)

2021-10-19 10:08:46 字數 850 閱讀 9912

質數:在大於1的整數中,如果只包含1和本身這兩個約數,那麼就是素數時間複雜度 o(sqrt(n))

**:

static

boolean prime(int

n)

return

true

; }

合數只會被它的最小質因子篩掉

時間複雜度:o(n)

static

final

int n=;

static

int prime=new

int[n];

static

boolean vis=new

boolean

[n];

static

int cnt=0;

static

void get_primes(int

n) }

}

時間複雜度: o(n*loglogn)在n=10^6,時間和線性尤拉篩法差不多,但是10^7線性尤拉篩法就快了一倍

乙個數為素數,那麼它的倍數肯定不是素數

**:

static

final

int n=;

static

int prime=new

int[n];

static

boolean vis=new

boolean

[n];

static

int cnt=0;

static

void get_primes(int

n) }

}

素數篩法 模板

為什麼只遍歷到sqrt n 就夠了?反證法 假設只遍歷2 sqrt n 不能把所有非素數置為false,即遍歷完了2 sqrt n 後,在sqrt n n範圍內仍有乙個非素數k,但isprime k true。證 k在sqrt k 之前一定有乙個素數因子 任何非素數都可以拆成素數的乘積,所以k至少有...

模板 素數篩法

好 快 素數是什麼就不用介紹了吧。先介紹判斷素數的方法 先看樸素演算法 for i 2 i if n i 0 break if i n printf n is prime else printf n is not prime 真的好樸素。用時o n 肯定不行啊,吃棗藥丸的。怎麼優化呢?不難發現,如果...

素數篩法(素數篩 線性篩)

求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...