已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入格式
输入一个正整数
n。
输出格式
输出一个正整数
p,即较大的那个质数。
例如
输入:21
输出:7
输入:1999999874
输出:999999937
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//一个数由两个数相乘得到,那么其中一个一定比他的平方根小,一个肯定比他的平方根大
//所以我们就不必把小于n的所有质数(素数)都求出来然后二重循环找两个乘数了 (那样较大的测试样例也会出问题)
// 只需要求出比他平方根小的部分就行了
//然后题目给出的数必然是由两个质数相乘得到的,那么后面我们只需要对数组进行取余遍历,便可以得到谁是另外一个乘数
//那么这个数自然也就是二者中的较大值。
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int t = 0,count = 0;
for (int i = 2; i <= (int)(Math.sqrt(n)); i++) {
if(isPrime(i)){
count++;
}
}
int [] arr = new int[count];
for (int i = 2; i <=(int)(Math.sqrt(n)) ; i++) {
if(isPrime(i)){
arr[t] = i;
t++;
}
}
int result = 0;
for (int i = 0; i < count; i++) {
if(n%arr[i]==0) result = n/arr[i];
}
System.out.println(result);
}
public static boolean isPrime(int n){
if(n==1) return false;
else{
for (int i = 2; i <= (int)(Math.sqrt(n)); i++) {
if(n%i==0)return false;
}
}
return true;
}
}
感谢您的观看,仅是日常小练习,如有错误,欢迎指正