我遇到的问题是x=(16807 x k)%65536
ie 16807k∏x(型号65536)
我需要知道x来计算k。
我到目前为止最大的努力是一种野蛮的力量。有没有计算k的数学方法?
如果没有任何优化我目前的代码将不胜感激。

t = x;
while ( t += 15115 ) // 16807k = 65536n + x - this is the n
{
    if (t%16807 == 0)
    return t/16807;
}
return x;

编辑:更改+=为15115

最佳答案

奇数的乘法逆模是2的幂。
16807 mod 216的倒数是22039。
这意味着(16807 * 22039) % 65536 == 1,因此

(16807 * 22039 * x) % 65536 == x

以及
k = (22039 * x) % 65536

因此,您不必尝试任何操作,只需直接计算k

10-06 09:12