方案一二三效率依次递增
循环次数从 x -> x/2 -> sqrt(x)递减
方案一
/**
* 从2 到x-1 测试是否可以整除 循环
* 要循环 x-1 遍
* 当x很大时,循环次数约等于 x遍
*/
static void checkPrime01(int x){
boolean prime = true;
if(x == 1){
prime = false;
}
for (int i=2;i<x;i++){
if(x % i == 0){
prime = false;
break;
}
}
if (prime){
System.out.println(x + "是素数");
}else{
System.out.println(x + "不是素数");
}
}
方案二
/**
* 去掉偶数 ,从3到x-1,每次加2
* 如果是偶数,直接判断
* else 循环(x-3)/2 + 1 遍
* 当x很大时,循环次数约等于 n/2遍
* @param x
*/
static void checkPrime02(int x){
boolean prime = true;
if(x == 1 || x % 2==0 && x !=2){
prime = false;
}else {
for (int i = 3; i < x; i += 2) {
if (x % i == 0) {
prime = false;
break;
}
}
}
if (prime){
System.out.println(x + "是素数");
}else{
System.out.println(x + "不是素数");
}
}
方案三
/**
* 循环无需到 x-1 ,到sqrt(x)就够了 x的平方根
* 循环次数sqrt(x)
* @param x
*/
static void checkPrime03(int x){
boolean prime = true;
for (int i = 3; i < Math.sqrt(x); i += 2) {
if (x % i == 0) {
prime = false;
break;
}
}
if (prime){
System.out.println(x + "是素数");
}else{
System.out.println(x + "不是素数");
}
}