python - 检查一个非常大的数字是否可以被 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
解决方案
您需要使用整数除法,而不是浮点数。
num //= 2
这是输出的前 20 行,您可以在其中看到它正在工作:
2
1828282802580825813263312645995632580828
2
914141401290412906631656322997816290414
2
457070700645206453315828161498908145207
3
1371212101935619359947484484496724435622
2
685606050967809679973742242248362217811
3
2056818152903429039921226726745086653434
2
1028409076451714519960613363372543326717
3
3085227229355143559881840090117629980152
2
1542613614677571779940920045058814990076
2
771306807338785889970460022529407495038