无法运行程序

Unable to run program

本文关键字:程序 运行      更新时间:2023-10-16

,所以我试图找到相当大的数量的最大质量因素。这是关于Euler项目的问题(http://projecteuler.net/problem = 3)。我的问题是,当我进行编译和运行程序时,命令提示符空着,它只是黑色,上面没有文字。

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector <int> factors;
bool isPrime(int number)
{
    bool prime = true;
    int maxIndex=number/2;
    for (int index=2; index <= maxIndex; index++)
    {
        if (number % index == 0)
        {
            prime = false;
            break;
        }
    }
    return prime;
}
int Facts()
{
    float num = 600851475143;
    for (double i=1000000; i<=num; i++)         
    {
        if (fmod(num,i)==0)
            factors.push_back(i);
    }
}
int main()
{
    Facts();
    for (int i=0; i<factors.size(); i++)
    {
        if (isPrime(factors[i]))
            cout << i << ", " ;
    }
    return 0;
}

我已经想到该程序可能需要很长时间,因为我要做的操作很耗时。如果是这样,是否有更快的方法可以找到这个问题的答案?我没有看到我的代码问题,但是如果其他人确实遇到问题,请随时更改它。

您的程序仅在找到结果时才能输出。它找不到任何。

600851475143的主要因素是71×839×1471×6857。在Facts中,您仅在寻找大于1000000的因素。

是的,您的蛮力方法的训练方法比目标少,并检查它们是否是一个因素,然后检查它们是否是素数是非常慢的方法。有关更快的算法,请参见此问题。

浮子在计算中失去精度,并且不能保证具有大于1677216的整数的准确表示(可能取决于您的平台)。因此,将fmod的结果与零与平等的结果进行比较不会很好地工作。您应该始终使用epsilon值来测试是否浮子接近另一个值。有关详细信息,请参阅比较浮点数以及每个计算机科学家对浮点的了解。

您可以改用long long并使用整数计算。operator%的速度可能也比fmod快。

另外,如果您的程序确实找到了某些内容,它将仅输出结果的数组索引,我认为这不是很有用。