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