题解 | #对素数判定最完善的理解,以及开方问题的解释#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int num = in.nextInt();
for(int i=num/2;i<num;i++){
if(isPrime(i)&&isPrime(num-i)){
System.out.println(num-i);
System.out.println(i);
return;//确保走出循环
}
}
}
}
public static boolean isPrime(int n){
for(int i=2;i<=Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
}
private static boolean isPrime(int num) {
//谨记,涉及到素数,就是使用目标数与2到它本身的所有数分别整除,如果有能整除的,说明不是素数。1不在考虑范围。
//因为只能被1和本身整除的就是素数,能整除这之外的才不是素数。
for (int i = 2; i <= Math.sqrt(num); i++) {
//对目标数开方后让它与从2->根号num的所有数分别整除,(包含开方后的数,比如9->3)如果能整除,
//说明num除了1和本身还有其他因数,比如整除的那个数就是之一
//可以不开方,但是开方的话不需要一直整除到num本身的位置,
// 比如23,开方后接近5,随着i的递增,另一个因数会递减,在整除6的时候近似相当于整除4,
// 前面已经算过了。因此涉及到乘法就使用开方来缩小遍历范围。
if (num % i == 0) {
return false;
}
}
return true;
}
安克创新 Anker公司福利 565人发布
查看8道真题和解析