(欧拉计划#3)试图将Python中的解决方案复制到C++,结果非常糟糕,不知道如何

(Project Euler #3) Trying to replicate a solution in Python to C++, going horribly wrong, not sure how

本文关键字:结果 C++ 复制 非常 不知道 解决方案 计划 Python      更新时间:2023-10-16

编辑:已解决!简单的错误,不小心将 int 值留在了 int 上,这不能容纳那么大的数字。感谢您的帮助!

我已经完成了欧拉计划的第三个问题:

"13195的质因数是5、7、13和29。数600851475143的最大质因数是多少?"?

在 Python 中使用以下代码(有效):

def main():
    num = 600851475143 # You can replace this number with any number you want to find the largest prime to
    x = 2
    while x * x < num: 
        while num % x == 0:
            num = num / x #Divide number by generated number (X) to get the prime number.
        x = x + 1 # Continue in formula searching for largest prime
    print num #Prints largest prime of the assigned number (600851475143)
main()

这工作得很好。但是,当我尝试使用以下代码将所述代码替换为C++时:

#include "stdafx.h"
#include <iostream>
int main()
{
    int num = 600851475143;
    int x = 2;
    while (x*x < num)
    {
        while (num % x == 0)
        {
            num /= x;
        }
        x = x++;
    }
    std::cout << num;
    char z;
    std::cin >> z;
    return 0;
}

我总是得到输出"-443946297",而不是我期望的正确且非常不同的输出"6857"

谁能帮助解释我是如何从本质上相同的代码中得到如此疯狂的答案的?提前感谢!

600851475143可能太大而无法放入int,导致溢出。尝试将类型更改为 long long 。(您可能也应该将x更改为long long,尽管在这种情况下可能无关紧要。