C++ prime 循环测试以错误的方式执行

C++ prime loop test executes in false manner

我目前正在接受一些挑战并寻找可以做的事情来测试我在 C++ 中的新能力,我决定主要做数学,在这种情况下是欧拉问题。下面是一些代码,用于查找给定数字的最大质因数,但是由于某种原因它没有进入 for 循环,我什至 运行 cout << "Test" << endl; 但它不会打印语句,为什么这个?

#include <iostream>
#include <string>

using namespace std;

int ReturnPFactors(int number)
{
    int Factor{};
    int thisnum = number;
    for (int x = 0; x < thisnum; x++)
    {
        cout << "Here" << endl;
    }
    return Factor;
}

bool isPrime(int n)
{
    // Corner case 
    if (n <= 1)
        return false;

    // Check from 2 to n-1 
    for (int i = 2; i < n; i++)
        if (n % i == 0)
            return false;

    return true;
}

int main()
{
    //should be looking for 6857
    int Number = 600851475143;
    cout << ReturnPFactors(Number) << endl;
    return 0;
}

如果你有任何问题,我会在接下来的 30 分钟左右(从这个 post)开始,然后再睡觉。

600851475143 对于典型环境中的 int 类型来说太大了,它是 32 位长并且最多可以存储 2147483647

600851475143 在二进制中是 1000 1011 1110 0101 1000 1001 1110 1010 1100 0111.

在典型环境中,它被截断为 32 位长:1110 0101 1000 1001 1110 1010 1100 0111

它的最高位是1,因此在典型环境中它被视为负数。

因此,i < thisnum变为false,循环体不会被执行。

您应该使用 long long,它至少是 64 位长,并且 600851475143LL 带有前缀 LL,代表 long long