线性筛选素数法(O(n)复杂度)
生活随笔
收集整理的這篇文章主要介紹了
线性筛选素数法(O(n)复杂度)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ?昨天有個SB給我講了一個線性篩選素?cái)?shù)法O(n)的復(fù)雜度,感覺很神奇,自己看了看,
確實(shí)牛b的樣子。其實(shí)它不像一般的篩選素?cái)?shù)法會重復(fù)操作標(biāo)記非素?cái)?shù),此方法不會重復(fù)
之行操作,遍歷只需一次就行。
void get_prime() {int num = 0 ;memset(vis,false,sizeof(vis));for(int i = 2 ; i < n ; i ++){if(!vis[i]) prime[num++] = i ;for(int j = 0; j<num && i*prime[j]<n ; j ++){vis[i*prime[j]] = true ;if(i % prime[j] == 0) break ;}} } /*可以用均攤分析的方法來分析算法的復(fù)雜度,由于每 個合數(shù)都唯一的被它的最小素因子篩一次,而每個合 數(shù)的最小素因子都是唯一的,總復(fù)雜度是O(n)*/
一般 篩選素?cái)?shù)法:
void get_prime() {int num = 0 ;memset(vis,false,sizeof(vis));for(int i = 2 ; i < n ; i ++){if(!vis[i]) {prime[num++] = i ;for(int j = 2*i ; j < n ; j += i){vis[j] = true ;}}} }
總結(jié)
以上是生活随笔為你收集整理的线性筛选素数法(O(n)复杂度)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 积木报表对比帆软报表有什么区别?
- 下一篇: Jartto: 如何成为一名合格的技术面