当我使用大数字

时间:2017-04-23 14:08:53

标签: c++ crash

我对c ++很新,所以我不太了解,只是非常基础。我试着写一个程序来找到一个数字最大的素数因子。它适用于5位数字,但当我输入一个大于5位的数字时程序崩溃。我实际上需要将程序用于12位数字。任何人都可以建议我应该在代码中更改什么。代码如下

#include <iostream>

using namespace std;

bool checkPrime(uint64_t a, uint64_t x)
{
    a = a + 1;
    uint64_t b = a*a;
    if (b <= x)
    {
        if (x%a == 0)
        {
            return false;
        }
        else {
            checkPrime(a, x);
        }
    }
    else {
        return true;
    }
}

uint64_t  findPrime(uint64_t a, uint64_t x, uint64_t h)
{
    a = a+1;
    if (a <= x)
    {
        if (x%a == 0)
        {
            if (checkPrime(1, a))
            {
                h = a;
                findPrime(a, x, h);
            }
            else
            {
                h = h;
                findPrime(a, x, h);
            }

        }
        else
        {
            h = h;
            findPrime(a, x, h);
        }
    }
    else {
        return h;
    }
}

int main()
{
    cout << "Hello world!" << endl;
    uint64_t f;
    cout << "Enter the Number: ";
    cin >> f;
    uint64_t z = findPrime(1, f, 1);
    cout << "Largest Prime Factor is " << z << endl;


    return 0;
}

1 个答案:

答案 0 :(得分:0)

我首先在每个函数内的几个位置添加一个简单的cout语句,以确定错误发生的位置。

正如molbdnile指出的那样,你的递归可能会过于深入。使用 a 作为计数器将其重写为forloop可能更好。

另一个潜在的问题是

uint64_t b = a*a;

如果 a 足够大,则将其与自身相乘可能会溢出 b