【发布时间】:2017-08-20 16:14:07
【问题描述】:
我正在尝试使用质数筛来查找某些数字的所有质因数。在我的代码中,我最终不得不将一个非常大的数字除以一个小数字,以找到一个超出我正在使用的筛子范围的素数。这应该不是问题,事实上,该方法对我检查的每个数字都非常有效,除了一个。
我遇到的问题是,我将这个大数除以 51 以找到素因数,然后当我将它乘以 51 以检查它是否等于原始数字...它不!
无论我将其转换为 int 还是将其保留为科学记数法中的浮点数,它都不起作用。
我知道浮点数并不完美,但我不知道如何解决这个奇怪的错误。我什至将这些数字插入计算器并得到了正确的答案,但我的代码给了我错误的答案。
这里发生了什么? 如果你运行我的代码,你会看到检查返回 False,而它们应该是 True。
正如我之前所说,这种方法适用于我正在测试的一个数字,它的因素超出了我正在使用的筛子的范围,我遇到的问题只是这个特定的大数字。
正确答案应该是 1,176,462,117,668,023,508,828,242,241 我得到的答案是 1,176,462,117,668,023,481,334,235,136
l_number = 59999568001069198950240354291
answer = 59999568001069198950240354291 / 51
int_answer = int(answer)
check = int_answer*51
check2 = answer * 51
print("The large number is: {:,d}".format(l_number))
print("Large number divided by 51: ", answer)
print("If the check is == original number: ", check2 == 59999568001069198950240354291)
print("Large number divided by 51 as an integer: {:,d}".format(int_answer))
print("That answer * 51 (should be original number): {:,d}".format(check))
print("If the integer check is == original number: ", check == 59999568001069198950240354291)
【问题讨论】:
-
我希望你有一个好的筛子。该数字的下一个素数(在 3 和 17 之后)是 143047654201
-
该方法找到因子3和17然后将它们相乘得到51,然后将原始数字除以51得到最后一个素因子。
-
我将 1e7 的参数用于筛子,以及任何大于通过将已知素数相乘并除以数字而找到的其他因子
标签: python python-3.x scientific-notation