1 判断素数
素数就是一个数被除数除了1和它本身就没有其他被除数了(1除外,1不是素数)
1.1 常规判断素数的方法
/**
* 常规判断素数的方法
* 从2遍历如果到这个数之前都不可被整除,则该数为素数
* @param num
* @return
*/
public boolean isPrimeNum(int num) {
if(num <=1) {
return false;
}
for(int i=2; i<num; i++) {
if(num % i == 0) {
return false;
}
}
return true;
}
1.2 开根号判断法
/**
* 通过开根号的判断方法来判断是否是素数
* @param num
* @return
*/
public boolean isPrimeNumBySqrt(int num) {
if(num <=1) {
return false;
}
for(int i=2; i<=Math.sqrt(num); i++) {
if(num % i ==0) {
return false;
}
}
return true;
}
注意:这里i<=math.sqrt(num)需要等于,如果没有等于,如同9就会判断出错。
1.3 筛选法
/**
* 筛选法判断数字是否是素数
* 通过空间换时间即new一个boolean数组出来,
* 依次遍历i如果i不是num的公约数则把i的倍数全部值为true(已经判断)
* @param num
* @return
*/
public boolean isPrimeNumByFiler(int num) {
if(num <=1) {
return false;
}
boolean[] array = new boolean[num+1];// 类装载后每个元素都为false(未判断);
for(int i=2; i<num; i++) {
if(array[i] == false) { // 如果没有判断过就判断
if(num % i == 0) {
return false;
} else { // 判断这个数不是num的公倍数则把这个数的倍数全部职位以判断
for(int j=2;i*j<num;j++) { // i的倍数<num则继续
array[i*j] = true;
}
}
}
}
return true;
}