质数(素数): 在大于1的自然数中,除了1和它本身以外不再有其他因数的数。
合数: 自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数,与质数相对。
如何判断一个数是否为质数
方法一:
- 从 2~(n-1)进行遍历,判断能不能整除,从而判断是不是质数。该方法在数据量比较大的时候,效率比较低。
方法二:(2步)
- 判断能否被2整除,如果能,说明这个数不是质数。如果不能,说明这个数也不能被(2,4,6,…2*i)整除,所以下一步只需要对3~(n-1)之间的奇数进行判断即可。
- 只需要遍历 3~Math.sqrt(value)这个范围的数即可。原因分析如下:任何一个合数都可以分解为几个质数的乘积;所以肯定会有质因数<=Math.sqrt(value);所以只需遍历3~Math.sqrt(value)这个范围的数,有能整除的则不是质数,没有则是质数。
代码如下 IsPrime(int val)函数所示:
//快速判断一个数是不是质数:(总共2步)
//1、判断能否被2整除
//2、遍历 3~Math.sqrt(value)这个范围
public static boolean IsPrime(int val){
boolean flag = true;
if((val & 1) == 0){
flag = false;
return flag;
}
for(int i=3; i<= Math.sqrt(val); i+=2){
if(val%i == 0){
flag = false;
break;
}
}
return flag;
}