思路
- 无法找到一个直接的数学公式来计算这个问题。因此依此尝试一个数是不是素数【枚举】
枚举:
- 枚举的顺序:求最大符合条件的素数:因此从大到小枚举比较好
- 解空间: [N-1, 2]
- 从N-1开始循环,找到第一个素数,就可以返回这个数。到2(包括2)既可以终止循环,如果一个
- [N-1,2]之间要么是素数,要么不是素数,没有第3中可能了
- 求最大符合条件的素数,这里的关键点在于判断一个数是不是素数
- 质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
- 不是素数
- 如果一个数能被另一个数整除,那么这个数 <= 另一个数/2
tag: 素数、枚举
解答
public static int getPrime(int n) {
// 求小于n的最大素数
for (int i = n - 1; i > 1; i--){
// 判断i是不是指数: i只能被它本身和i整除: 除数j = [i-1, 2)
// 又因为如果被除数大于除数的一半,就一定不可能被整除: 除数
boolean flag = false;
for (int j = i / 2 ; j > 1; j--){
if (i % j == 0){ // 不是素数
flag = true;
break;
}
}
if (!flag){
return i;
}
}
return -1;
}