RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32位正整数,请对其进行因数分解,找出是哪 两个素数的乘积。 PS:示例 n=1*n,不符合题意。1不是素数

import java.util.*;   

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int a = -1, b = -1;
        // Math.sqrt(s)平方根 为什么是平方根看下面注释
        for (int i = 2; i < Math.sqrt(num); i++){
             // 假设i走到了5,5是素数
        	if (isPrime(i)) {
                // 35对5能整除 余数0
                if (num % i == 0) {
                    // 检查35对5商7,商是素数
                	if (isPrime(num / i)) {
                		a = i;
                		b = num / i;
                    }
                }
            }
        }
        System.out.println(a + " " + b);
    }

	 /**
     * 如果数字n不是素数,则它一定可以写成两个数字相乘的形式(除了1*n),这两个数字称为n的因子,如:16=2*8=4*4
     * 所以我在判断n是否为素数时,只要找到一对因子中的一个就能证明n不是素数
     * 而这一对因子中至少有一个因子小于等于根号n
     *
     * @param s
     * @return
     */
    private static boolean isPrime(int s) {
        if (s < 2) return false;
        // Math.sqrt(s)平方根
        for (int i = 2; i <= Math.sqrt(s); i++){
        	if (s % i == 0) {
                return false;
            }
        }
        return true;
    }