C++ 控制台应用程序未运行且未显示任何内容

C++ 控制台应用程序未运行且未显示任何内容,c++,console,C++,Console,问题是要解决这个问题 13195的主要因子为5、7、13和29。 数字600851475143中最大的素因子是什么 我写了这段代码 #include <iostream> #include <math.h> using namespace std; bool prime(long int a); int main() { long int b = 600851475143/2; long int k; for(long int i = 1; i <= b

问题是要解决这个问题

13195的主要因子为5、7、13和29。 数字600851475143中最大的素因子是什么

我写了这段代码

#include <iostream>
#include <math.h>
using namespace std;

bool prime(long int a);

int main()
{
long int b = 600851475143/2;
long int k;



for(long int i = 1; i <= b ; i++)
{
    if(b % i == 0 && prime(i) == true)
        {
            k = i;
        }
}
cout << k << endl;
return 0;



}

bool prime(long int a) 
{
bool p = true; 

for(long int i = 2; i <= sqrt(a) && p == true ; i++) 
     if(a % i == 0) p = false;

return p;
}
#包括
#包括
使用名称空间std;
布尔素数(长整数a);
int main()
{
长整数b=600851475143/2;
长整型k;

for(long int i=1;i在main中的for循环中添加一个cout语句。您的程序正在运行,这需要很长时间。

代码很好。600851475143/2只是一个大数字,因此您必须等待几分钟,直到结果打印出来。 此外,如果它是一个使复杂度不必要地高得多的素数,则需要测试两次。 试试这个:

long int b = 600851475143/2;
long int k = b;
for(long int i = 2; i < b ; i++)
{
    if(b % i == 0)
    {
        k = i;
        break;
    }
}
cout << k << endl;
long int b=600851475143/2;
长整数k=b;
对于(长整数i=2;icout调试器是解决此类问题的优秀工具。在程序开始时弹出断点,启动程序,然后开始单步执行,直到程序阻塞或开始循环。g++发出警告:隐式常量转换溢出[-Woverflow]long int b=600851475143/2;您应该解决这个问题。想想看,600851475143/2;是一个巨大的数字。您可能需要重新考虑使用它作为循环绑定。关于<代码> Prime< /Case>计算,这是一种非常缓慢的方式。考虑您重新计算的次数:<代码> i=2 < /Calp>案例。我没有完成。之前的想法。使用记忆来减少你必须做的冗余工作。看看你是否可以利用素数筛。我认为问题就在于此。也许有更好的方法来解决这个问题吗?@ManeHambardzumyan研究密码学。他们每天都会把大量的数字分解成素数他们有很多技巧使计算更容易。