华为od-C卷100分题目7 - 素数之积
题目描述:
RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高。
给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。
输入输出描述:
输入描述:
一个正整数num
0 < num <= 2147483647
输出描述:
如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1。
示例1:
输入:
15
输出:
3 5
示例2:
输入:
27
输出:
-1 -1
示例3:
输入:
1682173
输出:
1291 1303
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long max;
for (long i = 2; i <= (long) Math.sqrt(n); i++) {
if (n % i == 0) {
if (isPrime(i)) {
max = n / i;
if (max * i == n && isPrime(max)) {
System.out.println(i + " "+ max);
return;
}
}
}
}
System.out.println("-1 -1");
}
public static boolean isPrime(long n) {
if (n < 2) {
return false;
}
for (long i = 2 ; i <= Math.sqrt(n) ; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
思路:很简单,就是循环判断素数