C++ 如何为任何值编码Euler#3? /* 13195的主要因子为5、7、13和29。 数字600851475143中最大的素因子是什么? */ #包括 #包括 #包括 使用名称空间std; int main() { 无符号长数=600851475143; 无符号长i; 长双根=sqrt(num); 长双tempRoot=0; 无符号长因子=0; 无符号长最大值=0; 对于(i=2;i

C++ 如何为任何值编码Euler#3? /* 13195的主要因子为5、7、13和29。 数字600851475143中最大的素因子是什么? */ #包括 #包括 #包括 使用名称空间std; int main() { 无符号长数=600851475143; 无符号长i; 长双根=sqrt(num); 长双tempRoot=0; 无符号长因子=0; 无符号长最大值=0; 对于(i=2;i,c++,C++,您不必进行素数检查。在进行因式分解时,只需确保继续对候选对象进行除法,直到它不再对数字进行除法。在代码中执行此操作非常容易:只需将if(num%i==0)更改为while(num%i==0)实际上,600851475143也有非素数因子!例如,1234169将其除法。对于600851475143,您可能需要long而不是unsigned long。循环条件应该是i /* The prime factors of 13195 are 5, 7, 13 and 29. What is the lar

您不必进行素数检查。在进行因式分解时,只需确保继续对候选对象进行除法,直到它不再对数字进行除法。在代码中执行此操作非常容易:只需将if(num%i==0)更改为
while(num%i==0)

实际上,600851475143也有非素数因子!例如,1234169将其除法。对于
600851475143
,您可能需要
long
而不是
unsigned long
。循环条件应该是
i
/*
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;
}