【发布时间】:2019-08-02 19:47:17
【问题描述】:
我需要检查 X 是否可以被 Y 整除。在其他情况下,我不需要实际的余数。
我正在使用“mod”运算符。
if (X.mod(Y).equals(BigInteger.ZERO))
{
do something
}
现在,我只对 X 可被 Y 整除感兴趣,在其他情况下我不需要实际余数。
当被除数固定时,寻找一种更快的方法来检查整除性。更准确地说,在进行 Lucas-Lehmer 测试之前检查具有许多较小素数的大数(可能是素数)。
我只是想知道,我们是否可以根据 X 和 Y 的最后一位或两位数做出一些假设(前瞻类型),我们可以决定是否选择 mod(当没有机会得到零)。
【问题讨论】:
-
有什么理由要优化这么多吗?或者这是过早优化的情况?
-
无论你想出什么,都不太可能比仅仅做模组更快。
-
有一些选择,但您可能会从更广阔的视野中获得更多。 X 和 Y 是如何计算的?它们有有用的特性吗? Y 是否“固定”了足够长的时间,以至于为它预先计算某些东西是有意义的?
-
与您要求的解决方案完全无关,但这种算术运算是记忆的理想选择。当您将函数的输入与输出一起缓存时,记忆是一种技术,因此对该函数的后续调用不会执行它,而是直接从缓存中返回答案。如果使用相同的数字进行调用,可能会比模数更快
-
你考虑过位移吗?
标签: java biginteger mod