30 lines
984 B
C++
30 lines
984 B
C++
/** The prime factors of 13195 are 5, 7, 13 and 29.
|
||
What is the largest prime factor of the number 600851475143 ? */
|
||
|
||
#include "0.hpp"
|
||
|
||
/* 分解因数,如果是素数返回 1 */
|
||
uu factor(uu a, uu min = 2)
|
||
{
|
||
uu temp = min;
|
||
uu sqr = (int)(sqrt((double)a) + _eps); // 定义尝试上界
|
||
while(temp < sqr) if(a % ++temp == 0) break; // 从最小值到上界开始尝试
|
||
if(a % temp == 0) return temp; // 如果 a 能分解则返回最小因子
|
||
else return 1; // 如果 a 是素数就返回 1,此处也可以设置为返回 x 本身
|
||
}
|
||
|
||
int main()
|
||
{
|
||
uu num = 600851475143;
|
||
uu temp = 2; // 尝试循环分解 num 的因子
|
||
do {
|
||
if(num % temp == 0) { // 如果满足 temp 整除 num
|
||
if(factor(num / temp) == 1) break; // 同时 num / temp 是素数则返回
|
||
else num /= temp; // 如果 num / temp 不为素数,就缩小 num 以减小运算量
|
||
}
|
||
temp++; // temp 增加
|
||
} while(1);
|
||
cout << (num / temp) << endl; // 输出结果
|
||
return 0;
|
||
}
|