① 給定一個正整數n(n<=10^6),問n以內有多少個素數? 做法:做法其實很簡單,首先將2到n范圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去……以此類推,如果表中剩余的最小的數是m,那么m就是素數。然后將表中所有m的倍數劃去,像這樣反復操作,就能依次枚舉n以內的素數,這樣的時間復雜度是O(nloglogn)。 ② 區間素數篩:給定兩個正整數a、b(a

注:最大公倍數求法,先求最小公約數rem, 最大公倍數= a/rem * b/rem * rem ;
循環隊列當 rear=front時,為空, 當還剩下一個空間的時候,表示隊列滿了 循環隊列滿的條件: (rear+1)%QueueSize == front 循環隊列的長度: (rear – front + QueueSize) %QueueSize
KMP模式匹配算法的目的在于減少不必要的匹配次數,從而提高匹配效率。KMP的核心在于next數組的推導,而next數組完全有模式串決定。 next數組意義:表示若在改位j匹配失敗,則將j=next[j]進行繼續匹配,從而減少不必要的匹配。 
KMP改進: 考慮如下情況:
| j | 123456789 |
|---|---|
| 模式串T | aaaaaaaab |
| next[j] | 012345678 |
| nextval[j] | 000000008 |
新聞熱點
疑難解答