仅用最终商与余数和反向还原迭代除法初始大数的可行性问询
仅用最终商与余数和反向还原迭代除法初始大数的可行性问询
嘿,我来帮你拆解这个问题~首先先明确你的场景:
你有一个初始大数2320584520,反复用除数256做除法,直到商小于256,得到了以下迭代过程:
2320584520 / 256 = 9064783(商>256,余数72)
9064783 / 256 = 35409(商>256,余数79)
35409 / 256 = 138(商<256,停止,余数81)
余数总和:72+79+81=232
正常还原的时候,我们需要用到每个步骤的余数,按顺序反向计算:
(256 * 138) + 81 = 35409 (256 * 35409) + 79 = 9064783 (256 * 9064783) + 72 = 2320584520
现在你想知道:能不能只靠最终商138、余数总和232(或者其他不超过256的数),再结合迭代次数和除数256,反向算出原始大数?
结论:不行,仅靠最终商和余数总和无法准确还原原始数
原因很简单:余数总和丢失了每个余数对应的「权重信息」。在还原过程中,每个余数对应的是256的不同幂次:
- 第一次除法的余数72,对应的是
256^0的位置(也就是最后一步还原时加的数) - 第二次的余数79,对应的是
256^1的位置(中间步骤加的数) - 第三次的余数81,对应的是
256^2的位置(第一步还原时加的数)
你之前尝试的((138 * 256) + 232) * 256 * 256,相当于把所有余数都放在了256^2的位置,这和它们原本的权重完全不符,所以结果肯定不对。
举个直观的例子:假设同样是3次迭代,最终商138,余数总和也是232,但余数组合换成81、79、72,那还原出来的数会是:
((138*256)+72)*256+79)*256+81 = 2320715017
这个数和你的原始数2320584520完全不同。再比如换成余数100、100、32,总和还是232,还原出来的数又会是另一个值。
补充说明
如果想要准确还原原始数,你必须保留每个余数的具体值——而每个余数本身就已经不超过256了,完全符合你“每个数不大于256”的要求。把多个余数压缩成一个总和的操作,会丢失关键的位置信息,导致无法唯一确定原始大数。
备注:内容来源于stack exchange,提问作者Sir D




