這是一個程序員的自我修養,一個學術者的自我探索,一個大神的養成之道。
什么是質數?
質數,又稱素數,有無限個。質數定義為在大于1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數。
一般我們求質數時都會去計算小于某一個數N的質數而不會不加限定,現在我們以求小于N的質數來說一說優化方式。在我們求質數的過程中一般會用到兩種方法試除法和篩選法兩種。
試除法
①判斷小于N的數X是否是質數,就是從2一直嘗試到X-1,這種做法效率最差,并不可取。
②如果X是質數,那么它如果不能被小于X/2的數整除即可,這樣算法效率提高一些
③除了2以外,所有的質數都只能是奇數,所以我們可以將數X先試除2,然后嘗試從3一直到X/2的所有奇數
④其實判斷一個數是否是質數,只需判斷一個數能不能被除了1之外小于x的數整除即可,
⑤最后,我們可以利用前面求出來的質數來判斷,我們只需判斷X能不能被小于x的質數整除即可,這樣效率會更高。
篩選法
①定義一個容器,將數據放入容器中,然后遍歷其中的數據,將是合數的數據刪除,最后剩余的就是質數了
②我們可以定義一個布爾類型的數組容器,將其中的值都賦值為true,在篩選的過程中將不是質數的數作為數組的下標將對應元素的值改為false,最后取出值為true的元素的下標即可
③構造定長的byte數組,數組的每個byte存儲8個布爾值,這樣性能有了些許提高。