C++:程序来找到一个数字的最大素因数,我的代码出了什么问题
C++: Program to find the largest prime factor of a number, what is wrong in my code?
这应该找到一个数字的最大质因数......但它不起作用。答案应该是 6857,但它返回688543..
int isPrime(unsigned long int n)
{
for(unsigned long int i=2;i*i<(n);i++)
{
if(n%i==0)
{
return 0;
break;
}
}
return 1;
}
int main()
{
unsigned long int num=600851475143;
unsigned long int max=2, i=2;
while(num!=1)
{
if(num%i==0 && isPrime(i))
{
max=i;
num/=i;
i--;
}
i++;
}
cout<<max;
return 0;
}
提前感谢:(
除其他问题外,这将是大数字的问题:
for(unsigned long int i=2;i*i<(n);i++)
对于大数字i*i
将溢出一个unsigned long
(在您正在编译的系统上似乎是 32 位(。
您可以通过切换它来修复它:
for (unsigned long int i = 2; i <= sqrt(n); ++i)
只要n
没有溢出,sqrt(n)
就会有效。 但是,如果您要使用非常接近 32 位整数边界的数字,我仍然建议改用 unsigned long long
。
unsigned long
显然在您的系统上是 32 位,所以num
不会600851475143
而是600851475143 mod 1<<32
哪个是3851020999
。 688543
是这个数字中最大的素因数,所以看起来你的算法至少可以正常工作。
查找编译器/系统组合上类型的最大范围,然后选择适当的范围。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 我的代码运行良好,但在游戏循环中中断
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 我的代码中的意外价值以及我如何修复它
- 为什么 rand 不在我的代码中生成随机数?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 无法找出我的代码中的内存泄漏
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试创建一个菜单,但我的代码一直在循环