如何为任何值编码欧拉 #3

How to code Euler #3 for any value?

本文关键字:编码 任何值      更新时间:2023-10-16
/*
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/
#include <iostream>
#include <string>
#include <cmath>
using namespace std;

int main()
{
    unsigned long num = 600851475143;
    unsigned long i;
    long double root = sqrt(num);
    long double tempRoot = 0;
    unsigned long factor = 0;
    unsigned long largest = 0;
    for (i=2; i<root; i++)
    {
        if (num%i == 0)
        {   
            num = num/i;
            factor = i;
            cout << factor << endl;
            if (factor > largest)
                {
                    largest = factor;
                }
        }
    }
    cout << largest << endl;    
return 0;
}

这个解决方案之所以有效,是因为巧合的是,600851475143的因子都是质数。但是在调试代码时,我为变量 num (=600851475143) 输入了各种值。例如,当我输入 135 时,它向我显示了所有因子,包括非素数因子。如何为因子添加质数检查器?我尝试使用与此处在嵌套 if 中使用的相同方法,但惨遭失败。任何帮助将不胜感激。

另外,请指出我是否在某些变量的情况下使用了不必要的大变量类型。

谢谢。

您不必进行素数检查。在分解时,只需确保继续划分候选人,直到它不再除以数字。这在代码中很容易做到:只需将if (num%i == 0)更改为 while (num%i == 0) 即可。