資料結構與演算法之素數的篩選

2021-10-04 04:45:28 字數 711 閱讀 3564

素數篩選,顧名思義就是給你一堆數,然後讓你找到其中的素數。直觀的思路就是針對乙個數n,從2開始列舉,一直列舉到n-1。顯然這個思路的演算法複雜度接近了o(nn),對大規模資料顯然是不可接受的。所以我們得優化這個思路,看能否進一步減低演算法時間複雜度。

我們以數字5為例,我們想知道5是否是素數,那麼我們從2開始列舉,發現5%2!=0,故繼續列舉到3,5%3!=0,故繼續列舉到4,5%4!=0。然後迴圈結束,可知5是乙個素數。但我們想要知道100是否是素數時,我們到底需不要從1列舉到99?顯然答案是否定的,因為我們只需列舉到10即可,即根號100。因為乙個非素數n的約數(遞增排列)是分布在n

\sqrt

n​的兩側,所以我們只要列舉n

\sqrt

n​的左側或右側即可。故其演算法時間複雜度是o(n

n

\sqrt

n​)。

bool find_prime(int n)

}return true;

}

但我們需要從很多資料中挑選出其中的素數時,我們可以採用「埃氏篩法」,時間複雜度是o(nloglogn).

int index=0;

int p[100000];

int maxn=100000;

int f[100000]=;

for(int i=2;i}其中陣列p儲存了篩選出來的素數。

演算法與資料結構 篩選法求素數

簡單表示 isprime i 等於0表示i不是素數,否則等於1則表示i是素數。define max 5000005 long isprime max void initprime long i,j isprime 0 isprime 1 0 for i 2 i 附 求乙個數的質因子個數 比如6 2 ...

資料結構與演算法之演算法

1.乙個問題的解可以分解為幾個子問題的解 2.這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 3.存在遞迴終止條件 假如這裡有 n 個台階,每次你可以跨 1 個台階或者 2 個台階,請問走這 n 個台階有多少種 走法?如果有 7 個台階,你可以 2,2,2,1 這樣子上去,也可以 1...

《資料結構與演算法》之資料結構簡介

資料結構 資料 結構,資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。一 資料的邏輯結構 指反映資料元素之間的邏輯關係的資料結構,其中的邏輯關...