题目
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
分析
- 判断一个整数n是不是质数的循环过程,只需要判断n能否被n的平方根以内的整数整除 即可
- 任意一个合数,都可以拆分成唯一的一组质数相乘的表示形式
- 求整数的最大质因子,只需要把这个整数拆分成一组质数相乘的表示形式,这组质数里最大的质数就是这个这个整数的最大质因子
- 此方法相比先找到所有因子再判断因子是否为质数的方法效率要高
代码如下
#include<stdio.h>
#define N 600851475143LL
int main() {
long long i = 2, ans = 0, num = N;
while (i * i <= num) {
if (num % i == 0) ans = i; // i一定是质数
while (num % i == 0) num /= i; // 对较大的因子继续拆分,直到在当前的质因子下不能继续拆分为止
i += 1;
}
if (num != 1) ans = num; // num有可能为1,此时最大质因子为i
printf("%lld\n", ans);
return 0;
}