java代码实现题目描述 已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。 输入格式 输入一个正整数 n。 输出格式 输出一个正整数 p,即较大的那个质数。
时间: 2024-05-31 20:07:01 浏览: 80
(JAVA)输入一个整数n,输出1——n之间的最大的数
方法一:暴力枚举
我们可以从2开始枚举到n,找到n的因子,判断这个因子是否为质数,如果是,就将其与n除以这个因子得到的数进行比较,取较大的那个作为结果。
时间复杂度:O(n)
Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int maxPrime = 0;
for (int i = 2; i <= n; i++) {
if (n % i == 0 && isPrime(i)) {
maxPrime = Math.max(maxPrime, i);
}
}
System.out.println(maxPrime);
}
private static boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
方法二:分解质因数
将n分解质因数,得到n=p*q,其中p和q都是质数。由于p和q是质数,所以它们的范围都是[2, sqrt(n)]。我们可以从p=2开始循环,判断p是否为n的因子,如果是,则q=n/p,判断q是否为质数,如果是,就返回q,否则继续循环。
时间复杂度:O(sqrt(n))
Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int p = 2;
while (n % p != 0) {
p++;
}
int q = n / p;
while (!isPrime(q)) {
p++;
while (n % p != 0) {
p++;
}
q = n / p;
}
System.out.println(q);
}
private static boolean isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
阅读全文