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 总结
计算素数最重要的思想在于,不在乎这个数到底有几个除数,把小于这个数的所有数循环除一遍,比较,既可以得出结论。