首页 > 解决方案 > 检查一个非常大的数字是否可以被 2 整除是错误的

问题描述

我在 3x+1 问题上尝试了一些东西,并注意到当我检查这个 num 是否可被 2 整除时,即使第二次迭代应该是假的,它总是正确的,它会像这样进行 20 次迭代,然后开始采取正确的行动。我想这是一个长数字问题?

num = 3656565605161651626526625291991265161656

while num != 1:
    if (num % 2 == 0):
        num /= 2
        print("2")
    else:
        num *= 3
        num += 1
        print("3")
    num2=f'{num:.1f}'
    print(num2)

这是结果的开始:

2
1828282802580825918440824287108404346880
2
914141401290412959220412143554202173440
2
457070700645206479610206071777101086720
2

标签: pythonlong-integerdivisioncollatz

解决方案


您需要使用整数除法,而不是浮点数。

        num //= 2

这是输出的前 20 行,您可以在其中看到它正在工作:

2
1828282802580825813263312645995632580828
2
914141401290412906631656322997816290414
2
457070700645206453315828161498908145207
3
1371212101935619359947484484496724435622
2
685606050967809679973742242248362217811
3
2056818152903429039921226726745086653434
2
1028409076451714519960613363372543326717
3
3085227229355143559881840090117629980152
2
1542613614677571779940920045058814990076
2
771306807338785889970460022529407495038

推荐阅读