?? primenumber.java
字號:
package com.ponyjava.common.util;
import java.util.HashMap;
import java.util.Map;
public class PrimeNumber {
private static final Map<Integer, int[]> primeMap = new HashMap<Integer, int[]>();
/**
* 查找下一個(gè)素?cái)?shù)
*
* @param max
* 最大的數(shù)
* @param pre
* 上一個(gè)素?cái)?shù)
* @return 如果沒有下一個(gè)則返回0;如果上一個(gè)素?cái)?shù)不在范圍內(nèi),返回-1。
*/
public static int getNextPrime(int max, int pre) {
int[] primeArr = primeMap.get(max);
if (primeArr == null) {
primeArr = generatorPrimes(max);
primeMap.put(max, primeArr);
}
return getNext(primeArr, pre);
}
/**
* 尋找下一個(gè)
*
* @param primeArr
* @param pre
* @return
*/
private static int getNext(int[] primeArr, int pre) {
for (int i = 0; i < primeArr.length; i++) {
if (pre == primeArr[i]) {
if (primeArr.length > i + 1) {
return primeArr[i + 1];
} else {
return 0;
}
}
}
return -1;
}
/**
* 創(chuàng)建素?cái)?shù)
*
* @param max
* @return
*/
private static int[] generatorPrimes(int max) {
int size = max + 1;
int[] allArr = new int[size];
// 0和1都不是素?cái)?shù)
allArr[0] = 1;
allArr[1] = 1;
// 挖空
for (int i = 2; i < Math.sqrt(size - 1); i++) {
if (allArr[i] == 0) {
for (int j = 2; j <= ((size - 1) / i); j++) {
allArr[i * j] = 1;
}
}
}
// 素?cái)?shù)數(shù)量
int primeCount = 0;
for (int i = 0; i < allArr.length; i++) {
primeCount += allArr[i];
}
primeCount = size - primeCount;
// 素?cái)?shù)數(shù)組
int[] primeArr = new int[primeCount];
int index = 0;
for (int i = 0; i < allArr.length; i++) {
if (allArr[i] == 0) {
primeArr[index++] = i;
}
}
return primeArr;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -