所以问题如下:
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:对你的所有回复而言,我得到了答案。 =)
答案 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
应该从相同的值开始。