原理非常簡單:
除了2,3,以外對於任意的n,只有6n-1和6n+1有可能是素數。(注意是有可能)
證明:
6n不是素數,因為他一定有因數2和3;
6n+2,6n+3,6n+4同樣不是(分別為2,3,2的倍數)於是只剩下了6n+1和6n+5(6n-1)
那麼,判斷的數範圍縮小為原來的三分之一
具體來講:如果判斷的數n%6!=-1或1的話,直接返回false不為質數
如果滿足條件,它有可能是質數,做進一步判定:
對於每乙個6n-1和6n+1來說,它一定不是2和3的倍數!(也不是4和6的倍數),那麼,在列舉因子時,只需列舉6n-1和6n+1就ok了,
再加上sqrt優化。。。。
三管齊下,複雜度為o(√n/9)大概是這樣吧。
bool is_prime(intn)
完結
關於組合問題的一種巧妙方法
在演算法設計與分析裡,組合排列 或者表面像排列組合 的問題很好的解決方法主要是回溯法,廣度優先遍曆法。這裡提供關於組合問題一種巧妙的解決辦法。比如我們要從m個元素裡取n個元素的所有組合。我們用乙個m位二進位制數代表m個元素 一位代表乙個元素 取n個元素可以看做是這個m位二進位制數中有n位的值為1.乙...
關於封裝的一種解釋
封裝這個解釋,我一直喜歡用cpu作為例子 cpu把所有的電阻電容閘電路等都封裝起來,只留出一些管腳 介面 讓使用者使用,cpu能暴露什麼,不能暴露什麼,是生產商設計決定的,使用者不能直接操作cpu的電阻電容等等,但可以通過給管腳適當的電壓來控制電阻電容等,也就是說使用者不能直接訪問cpu的屬性,但是...
外掛程式的一種安裝方法
今天看到eclipse color themes這款外掛程式,各種心水啊 一直是could not find 我想了一下,可能是一下兩個問題 1 我直接用的是adt自帶的eclipse,可能有bug,導致不能安裝外掛程式。2 網路問題,單位的性質比較特殊,不容許翻牆,所以母雞是不是這個問題。最後,我...