题目描述
已知正整数 n n n 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入格式
输入一个正整数 n n n。
输出格式
输出一个正整数 p p p,即较大的那个质数。
样例 #1
样例输入 #1
21
样例输出 #1
7
提示
1 ≤ n ≤ 2 × 1 0 9 1 \le n\le 2\times 10^9 1≤n≤2×109
NOIP 2012 普及组 第一题
解析
在解题前,我们需要知道:
假设某个数是两个质数的积,那个该数有且仅有这两个质因数
下面给出证明:因为实数n
是两个质数p,q
的乘积,则n
是一个素数。考虑素数n
的因数:由于n
是两个质数p,q
的积,那么p,q
是这个数的因数。由质数的定义:质数只能被1和自身整除,因此,假设该素数有不同于p,q
的因数k,j (k,j均不为0)
,则k,j
将与p,q
存在因数关系,显然这与质数的定义相悖。于是我们有:如果一个是两个质数的积,那么这个数有且仅有这两个因数。
在这个定理下,我们可以简化题目,即求一个数的因数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
int largestPrimeFactor = findLargestPrimeFactor(n);
System.out.println(largestPrimeFactor);
}
// Function to find the largest factor of a number
private static int findLargestPrimeFactor(int n) {
int largestPrime = 2;
while (n % 2 == 0) {
n /= 2;
}
for (int i = 3; i * i <= n; i += 2) {
while (n % i == 0) {
largestPrime = i;
n /= i;
}
}
if (n > 2) {
largestPrime = n;
}
return largestPrime;
}
}
--------------------蓝桥杯备赛系列正在不断更新中,欢迎各位大佬指导----------------------------------------------