Problem 3
Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143?
最大质因数
13195的质因数包括5、7、13和29。
600851475143的最大质因数是多少?
/********************* Program 1 ***************************
* 思路:
* 1.从2开始,作为因数,因式分解目标数,
* 2.待2无法分解,则累加成3作为因数,继续分解
* 3.依次类推
* 4.待分解完毕,最后的因数(也是最大质因数)既是答案
* 收获:
* 1.1. 封装
* 1.2. 质因数 prime factor
* 1.3. %d & %ld & %lld
* 评价:
* 优点:
* 1.计算量较小,速度较快
* 2.用函数实现封装
* 3.采用因式分解的办法,对目标数进行分解
* 缺点:
* 1.没能找到一种快速判断质数的方法
* 2.在因子遍历的过程中,不可避免地要遍历合数
**************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#define THE_AIM_NUMBER 600851475143
#include <stdio.h>
/*---------------------------------------------------------*/
//求 aimNumber 的最大质因数
// aimNumber 的取值范围: 1 ~ 18446744073709551615
unsigned long long GetMaxPrimeFactor(unsigned long long aimNumber)// 收获1.1~1.2
{
unsigned long long i = 2;
unsigned long long ret = 1;
while (aimNumber > 1)
{
if (!(aimNumber % i))
{
aimNumber /= i;
ret = i;
}
else
i++;
}
if (ret == 1)
return aimNumber;
else
return i;
}
int main()
{
unsigned long long answer = GetMaxPrimeFactor(THE_AIM_NUMBER);
printf("%lld\n", answer);// 收获1.3
return 0;
}