【发布时间】:2020-03-30 11:21:16
【问题描述】:
我正在尝试解决Project Euler third question,但是当我尝试使用大数字时,我的代码可以完美地处理小数字,但它没有给我任何答案。
#include<iostream>
using std :: cout;
using std :: cin;
using std :: endl;
int main()
{
long long int a = 0, bigPrime = 0, smallPrime = 2, prime = 0;
cout << "Please enter a number...!" << endl;
cin >> a;
for(long long int i = 2 ; i < a ; i++)
{
for(long long int c = 2 ; c < i ; c++)
{
if(i % c != 0)
{
prime = i;
}
else
{
prime = 0;
break;
}
}
if(prime > 0 )
{
if(a % prime == 0)
{
bigPrime = prime;
}
}
}
cout << "The biggest prime is = " << bigPrime << endl;
return 0;
}
那是我的错误代码 :) 我正在使用 ubuntu linux 和 g++ 我的代码有什么问题,我该如何改进它?
【问题讨论】:
-
你的
small numbers和big numbers在什么范围内撒谎? -
什么是无效的数字示例?我敢打赌 > (2^127)-1
-
例如 600851475143 这个数字不起作用,但如果我使用像 1000 或 23613 这样的数字,它可以完美地工作
-
在 Euler 案例中,您的外循环迭代超过六千亿次,而大多数内循环也是数十亿次。欧拉问题通常需要您在尝试解决方案之前使用数学,并且非常罕见地采用蛮横的方法。
-
我再次查看了我的程序,我发现我的代码可能可以工作,但它就像 molbdnilo 所说的那样太慢了(如果有语法错误,抱歉)
标签: c++ algorithm math prime-factoring