1 什麼是素數
素數又稱質數,指的是,除了1和它本身,沒有第三個數能夠整除它。
例如:
- 2:只能夠被1和2整除,質數
- 3:只能夠被1和3整除,質數
- 4:能夠被1、2、4整除,除了1和本身4,還有2,所以不是質數
注意:1本身只能夠被1整除,不算質數。
2 如何計算
根據質數(素數)的定義不難得出,要計算一個數是不是質數,需要明確是不是除了1和本身以外,還有其他除數。由此可以有一個計算思路:
- 給定一個數值n
- 從1到他本身之間循環i,用n去除i
- 除盡的話,判斷i是否是本身或是1
- 若是1,繼續循環計算
- 若是本身,則是質數。
- 中間有能夠整除n的數,則n不是質數
大致流程圖如下:
3 Java代碼實現
根據上面流程圖分析,下圖爲計算代碼:
/**
* 判斷一個數是不是質數
* @param number
* @return
*/
public static boolean isPrime(int number){
if(number<2){//若此數小於2,則不是質數
return false;
}
//從1-number本身循環取餘計算
for(int i=1;i<number;i++){
if(number % i == 0){//餘數爲0,能整除
if(number == i){//是否是本身
return true;
}else if(i!=1){//是否是1
return false;
}
}
}
return true;
}
判斷素數的方法已經寫出來,可以利用這個方法做其他運算,下面有一些計算示例:
3 計算一段範圍內的素數
打印出n~m區間,所有的素數:
public static void getPrimeNumber(int start,int end){
int primArr[] = new int[end-start];//用數組存素數,範圍在給出的範圍之內,使用集合會更加合理
if(end<start){//判斷參數有效性
System.out.println("輸入參數有誤!");
}else{
int index = 0;//數組下標,
for(int i = start;i<=end;i++){
if(isPrime(i)){//判斷是否質數
primArr[index] = i;
index ++;
}
}
}
if(primArr.length>0){//打印數組
for(int i=0;i<primArr.length;i++){
System.out.println(primArr[i]);
}
}
}
4 計算前m個素數
/**
* 打印出前m個素數
* @param m
*/
public static void getTopPrime(int m){
int primArr[] = new int[m];
if(m<1){
System.out.println("輸入有誤!");
}else{
int num = 0;//要計算的數
int index = 0;//第幾個質數
while(index < m){//數量不到m個一直循環
num++;//自增,不斷計算
if(isPrime(num)){
primArr[index] = num;
index++;
}
}
}
if(primArr.length>0){
for(int i=0;i<primArr.length;i++){
System.out.println(primArr[i]);
}
}
}
5 總結
計算素數最重要的思想在於,不在乎這個數到底有幾個除數,把小於這個數的所有數循環除一遍,比較,既可以得出結論。