1. 根據概念判斷:
如果乙個正整數只有兩個因子, 1和p,則稱p為素數.
public boolean isprime(int n)
時間複雜度o(n).
2. 改進, 去掉偶數的判斷
public boolean isprime(int n)
時間複雜度o(n/2), 速度提高一倍.
3. 進一步減少判斷的範圍
定理: 如果n不是素數, 則n有滿足1< d<=sqrt(n)的乙個因子d.
證明: 如果n不是素數, 則由定義n有乙個因子d滿足1< d< n.
如果d大於sqrt(n), 則n/d是滿足1< n/d<=sqrt(n)的乙個因子.
public boolean isprime(int n)
時間複雜度o(math.sqrt(n)/2), 速度提高o((n-math.sqrt(n))/2).
4. 剔除因子中的重複判斷.
定理: 如果n不是素數, 則n有滿足1< d<=math.sqrt(n)的乙個"素數"因子d.
證明: i1. 如果n不是素數, 則n有滿足1< d<=math.sqrt(n)的乙個因子d.
i2. 如果d是素數, 則定理得證, 演算法終止.
i3. 令n=d, 並轉到步驟i1.
由於不可能無限分解n的因子, 因此上述證明的演算法最終會停止.
// primes是遞增的素數序列: 2, 3, 5, 7, ...
// 更準確地說primes序列包含1->math.sqrt(n)範圍內的所有素數
public boolean isprime(int primes, int n)
5. 構造素數序列primes: 2, 3, 5, 7, ...
由4的演算法我們知道, 在素數序列已經被構造的情況下, 判斷n是否為素數效率很高;
下面程式可以輸出素數表.
public class showprimenumber
}if(isprime)
}int result = new int[cursor];
system.arraycopy(primenums,0,result,0,cursor);
return result;
}public static void main(string args) throws exception}}
6.(在素數表中)二分查詢
arrays.binarysearch方法:
該方法用於在指定陣列中查詢給定的值,採用二分法實現,所以要求傳入的陣列已經是排序了的。
該方法的基本語法格式為:
static int binarysearch(byte a, byte key)
該方法返回資料中key元素所在的位置,如果沒有key元素,則返回key應插入的位置:-(insertion point-1),如陣列中的第乙個元素就大於key,返回-1。
注:陣列的資料型別可以是int byte short float long double char object型別。
java中判斷素數的六種方法
1.根據概念判斷 如果乙個正整數只有兩個因子,1和p,則稱p為素數.public boolean isprime int n 時間複雜度o n 2.改進,去掉偶數的判斷 public boolean isprime int n 時間複雜度o n 2 速度提高一倍.3.進一步減少判斷的範圍 定理 如果...
JS判斷陣列的六種方法詳解
let arr 1.instanceof arr isntanceof array 2.proto arr.proto array.prototype array.prototype.isprototypeof arr array.prototype object.getprototypeof ar...
居中的六種方法
居中效果在css中很是普通的效果,平時大家所看到的居中效果主要分為三大類 水平居中 垂直居中和水平垂直居中。而其中水平居中相對於後兩者來說要簡單得多。早期總結了一下網際網路上有關於水平垂直居中的幾種實現方案,比如說 css製作水平垂直居中對齊 中介紹了八中實現水平垂直的方案,而在 css製作水平垂直...