项目欧拉#3获得一个数字的最大素数因子

时间:2014-02-28 10:40:01

标签: c++

所以问题如下:

13195的主要因素是5,7,13和29。 数字600851475143的最大主要因素是什么?

我为这个问题编写了一个代码,其逻辑和算法看似正确,但我似乎找不到错误,就是代码。

#include <iostream>

using namespace std;

int main()
{
    long int x = 600851475143;
    for(long int i=x-1; x%i; --i);
    cout << i;
    return 0;
}

RE:我不知道'我'的范围,我学校的老师没有告诉我=)[不责怪他们]


RE:对你的所有回复而言,我得到了答案。 =)

5 个答案:

答案 0 :(得分:1)

有两个小问题和一个大问题:

  • 您的i变量超出打印范围 - 语句标题中声明的变量范围以语句本身结束。在这种情况下,分号后看不到i,因此您需要在for
  • 之外声明它
  • 您的变量可能不一定包含要放入其中的值 - long允许为32位类型,而在许多平台上,它是。要使其至少为64位类型,请将声明更改为long long

一旦解决了这些问题,您的代码就会编译完成。但是,运行起来需要花费很长时间,因为代码存在第三大问题:你的算法太慢了。

答案 1 :(得分:0)

相反呢?只需声明for i的外观。

int main()
{
  long int x = 600851475143, i;
  for (i = x-1; x%i; --i);
  cout << i;
  return 0;
}

当您拨打i时,您的版本中cout不存在。

int main()
{
    long int x = 600851475143;    /* here i doesn't exist */
    for(long int i=x-1; x%i; --i) /* here i is declared */ ;
    /* the for is closed by ; so the scope of i is already closed */
    cout<<i;
    return 0;
}

但是,正如其他答案和评论所指出的那样,您的解决方案中还存在其他问题。

答案 2 :(得分:0)

我无法在for循环之外访问。

long int i=0;
for(i= x-1;x%i;--i);
cout<<i<<endl;

答案 3 :(得分:0)

至少以下代码编译正确并且没有溢出问题:

#include <iostream>

using namespace std;

int main()
{
    unsigned long long x = 600851475143, i;
 // ^^^^^^^^ Note the unsigned!
    for(i= x-1;x%i;--i);
    cout<<i;
    return 0;
}

答案 4 :(得分:0)

还有一个错误:

如果x为素数,则无法找到答案。 i应该从相同的值开始。