java中判斷素數的六種方法

2021-08-01 11:38:16 字數 1590 閱讀 2853

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製作水平垂直...