校招演算法篇之N以內的素數

2021-08-15 08:32:44 字數 1118 閱讀 3701

部落格斷更了一段時間,現在準備重新撿起來。寫部落格是乙個總結,分享的過程,也是提公升自我表達的很好的方式。將乙個問題以深入淺出的方式表達出來,讓讀者讀的開心,容易理解,這是我們開發人員職業生涯當中很重要的乙個能力。

前一陣子秋招,筆試面試了挺多公司,也積累了一點點自己的經驗,想陸續分享出來,也請各位多多斧正。

第一家面試的是深圳一家遊戲公司,手寫演算法題,求n以內的素數,當然需要一步步的去優化時間複雜度,過程就不細說了,下面說說我的理解。

1、首先是最常規的解法,判斷n是不是素數,即判斷n能否被[2,sqrt(n)]整除,若乙個數不是素數,那麼它分解的因數中一定有乙個小於等於sqrt(n),另乙個大於等於sqrt(n)。

static listprime1(int n) 

if(j>tmp) pri.add(i);

} return pri;

}

2、思考發現,判斷n能否被[2,sqrt(n)]整除,其中的除過2之外的偶數是多餘的,即只用判斷[2,sqrt(n)]之間的奇數。因為n若不能被2整除,就一定不能被2之後的偶數整除,這樣可以減小判斷的時間。

static listprime2(int n)

if(j>tmp) pri.add(i);

} return pri;

}

3、繼續探索,判斷n能否被[2,sqrt(n)]之間的奇數整除,這些奇數裡面的合數是多餘的。因為任何乙個合數都可以分解為它前面若干個素數的積,若不能被它前面的素數整除,則亦不能被此合數整除。所以整除的範圍縮小為[2,sqrt(n)]之間的素數。剛好本題目的目的就是求素數,所以可以將求得的素數放在陣列內用來判斷。

static listprime3(int n) 

}if(flag)

} return pri;

}

機器配置,

在n=2000000的時候,每種方法的執行時間,

python尋找n以內的素數演算法

本文所利用的素數性質是 所有的素數都是奇數,且除2,3外其餘素數都出現在6n 1與6n 1這兩個數列中 具體 如下 首先建立乙個長度為n的false列表,再將索引為2,3,和6n 1 6n 1這兩個數列在列表中的值改為true l false n l 2 l 3 truel 5 n 6 true l...

求n以內的素數

求n以內素數。素數又稱質數,它是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。有兩種方法 篩選法和開根號法 篩選法 從小到大篩去乙個已知素數的所有倍數。依次刪除可被2整除,3整除。的數字,剩下的則為素數 開根號法 如果乙個數 2 對這個數求平方根,如果這個數能被這...

題解 篩選N以內的素數

題目描述 用簡單素數篩選法求n以內的素數。輸入 n 輸出2 n 的素數 樣例輸入 30樣例輸出23 571113 1719 2329 題解 首先先解釋一下素數是什麼?素數一般指質數,質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。在一般領域,對正整數n,如果用2到n的開方之間的...