我有这个简单的程序:
// Include libraries
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Include locals
// Start
#define NUMBER 600851475143
int main(int argc, const char* argv[])
{
long long int ans = 0;
long long int num = NUMBER;
vector<int> factors;
do
{
// Get lowest factor
for (int i = 1; i <= num; ++i)
{
if (!(num % i))
{
factors.push_back(i);
num /= i;
break;
}
}
} while (num > 1);
cout << "Calculated to 1.\n";
int highestFactor = numeric_limits<int>::min();
for (int i = 0; i < factors.size(); ++i)
{
if (factors[i] > highestFactor)
{
highestFactor = factors[i];
}
}
ans = highestFactor;
cout << ans << endl;
return EXIT_SUCCESS;
}
用 g++ -O2 -c -o prob3.o prob3.cpp
编译被证明是成功的,但是当我运行它时我什么也没看到,它一直在运行,我不得不按 Ctrl-C(强制-kill) 最后。当我尝试添加时
int main(int argc, const char* argv[])
{
cout << "Test\n";
对于程序,Test
也没有被打印出来。就像我的程序根本没有执行。
如有任何帮助或建议,我们将不胜感激!
解决方案
我忘记了素数是从 2 开始的。将 for (int i = 1
更改为 for (int i = 2
。
最佳答案
那些嵌套循环将永远循环下去。由于 break
,内部 for
循环只会执行一次,所以它只会执行 num/= 1
。这意味着 num
永远不会减少,因此 num > 1
永远不会为假。我想你只需要再等一会儿!
您没有看到“测试”的原因可能是因为您没有刷新输出。尝试:
std::cout << "Test" << std::endl;
关于c++ - main() 不执行,但编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975231/