【发布时间】:2015-08-03 16:46:36
【问题描述】:
我正在尝试编写一个函数来比较一个数字 x1 与另一个数字 x2 的幂是否大于另一个数字 y1 与另一个数字 y2 的幂。
例如,假设我们有一对 x 的数字。
x = [2,10]
还有一对y
y = [3,9]
在这种情况下,y1 ** y2 大于 x1 ** x2。
但是,有时会有非常大的、可怕的数字。像这样
x = [935243113, 987702643]
y = [50894069, 704259526]
为了计算这个,我尝试使用 mod 10 算法
(x[0] ** x[1]) % 10 > (y[0] ** y[1]) % 10
但是,显然这种算法不起作用。有没有更有效的算法。
【问题讨论】:
-
这在理论上可行吗?我不明白为什么比较 mod10 结果应该说明完整结果的顺序。反例:
10**10vs9**9 -
我通过 Stack Overflow 找到了该算法。它可能应该
-
好吧,让我更难地反驳它:考虑一个包含 10 多个不同幂的列表,最多有 10 个模 10 的不同结果,因此其中至少有两个得到相同的结果并将比较“相等”(不大于另一个),即使我们只是假设它们是不同的。
-
(x[0] ** x[1]) % 10还是算x[0] ** x[1]
标签: ruby algorithm numbers modulus largenumber