/** 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; }