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; }