上篇文章向大家介紹的判斷質(zhì)數(shù)是的方法,雖然可以很好的判斷一個數(shù)是否為素數(shù)。但是如果遇到了這樣的題,也難免會超時。
題目描述
輸出 2 - n 之間所有的素數(shù)。(包含 2 和 n )
如果這種問題還采用一一判斷的話,時間復(fù)雜度顯然為O(N*N),如果時間限制是 1 s。當(dāng) N 大于 10000 就非常懸了,在加上一個 0 那就沒有懸念直接超時了。
這個時候我們就需要更精進的算法————素數(shù)表。
它的核心思想是,任何合數(shù)可以通過素數(shù)(或合數(shù))的乘積表示,而素數(shù)都(除了1和自身)不可以。
說白了實現(xiàn)過程就是遇到素數(shù)就要把它的倍數(shù)記做合數(shù),遇到合數(shù)跳過。首先默認(rèn)所有數(shù)為素數(shù),0、1記做合數(shù),從 2 開始遍歷,直到 n 。
說了這么多還是要用代碼實現(xiàn)