You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现考拉兹猜想程序运行到113000停止 未达int上限问题求解

问题原因分析

1. 32位有符号int溢出是核心诱因

C#默认的int属于32位有符号整数,最大值仅为2^31-1 = 2147483647。考拉兹猜想的计算过程中,中间值会远大于初始的验证数值,当你验证到113000附近的某个数时,计算过程中执行n2 * 3 +1操作时超过了int的最大值。默认情况下C#不会抛出整数溢出异常,溢出后的值会翻转为负数,后续所有计算、奇偶判断逻辑全部错乱,永远无法触发j == (1, 1)的终止条件,程序就会卡在死循环中无响应,看起来就像停止运行了。

2. 奇偶判断逻辑存在设计缺陷

你采用(double, int)元组对比除以2的结果判断奇偶的逻辑完全冗余,还额外引入了精度风险:当计算过程中的整数值超过2^53(约900万亿,是double类型可以精确表示的最大整数阈值)后,double会丢失整数精度,此时哪怕int值正确,double存储的值已经出现偏差,会直接导致奇偶判断错误。

修复方案
  • 替换数值存储类型:将存储计算值的int改为64位有符号整数long,大幅扩大数值范围,降低溢出概率。如果你要验证到int的最大值,计算过程中的中间值必然会超过32位int的承载上限,必须用更大的类型存储。
  • 更换奇偶判断逻辑:直接对整数做取模运算判断奇偶即可,不需要引入double做辅助,不仅逻辑更清晰,执行效率也更高。修改后可直接弃用多余的元组,参考代码如下:
static long Checker(long n)
{
    // 偶数直接除以2
    if(n % 2 == 0)
    {
        return n / 2;
    }
    // 奇数执行3n+1
    else
    {
        return n * 3 + 1;
    }
}
  • 可开启项目的整数溢出检查,或者在计算代码外层加checked块,溢出时会主动抛出异常,方便快速定位问题。

内容的提问来源于stack exchange,提问作者Joaie Adventure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:48:02