方法一:
最直接的方法是对所有小于该数的整数,判断是否为给出数的因数且为质数(最蠢的方法判断),然后输出最大的。这种方法的复杂度很高,应该会时间超时
方法二:
可以使用该数的因数对该数进行分解,再继续对分解后的数求最大质因数,这样我们的计算量将极大缩小。
int GetMaxPrime(int n) {
if (n == 0 || n == 1 || n == 2) {
return n;
}
int res = 1;
int i = 2;
while (n > 2) {
if (n % i == 0) {
n = n / i;
res = i;
} else {
i++;
}
}
return res;
}
方法三:递归
主要是我在解题过程中,使用方法二还是超时,借鉴了题解中的递归做法
int get_prime_factor(int a) {
if (a == 1 || a == 2) {
return a;
}
for (int i = 2; i <= sqrt(a); i++) {
if (a % i == 0) {
return max(get_prime_factor(a / i), i);
}
}
return a;
}