问题是关于非常大数的模运算符。
例如,考虑一个要计算排列总数的问题。
考虑一个 90 位数字,9 个数字(1 到 9)中的每一个都重复 10 次
所以90!/(10!)^9)
是要计算的
在阅读了 StackOverflow 上的许多答案后,我使用了对数。
现在考虑日志值为 1923.32877864。
现在我的问题是如何显示模数“m”的答案(即 10 ^ log10(value) )?
这是计算可能排列数的最佳方法吗?
编辑
得到了解决方案:)
感谢 duedl0r。
是否按照您使用模乘逆指定的方式进行。 谢谢 :)
最佳答案
我不确定这是否真的可行和正确,但让我总结一下我的评论并扩展 Miky Dinescu 的答案。
正如米奇已经写道:
a × b ≣m am × bm
你可以在你的平等中使用它:
90! / 10!^9 ≣m x
计算每一项:
90!m / 10!^9m ≣m x
然后找出你的multiplicative inverse从10!^ 9m。然后乘以 90!m 的逆。
更新
这似乎是正确的(至少在这种情况下:))。我检查了 wolfram:
(90!/10!^9) mod (10^9+7) = 998551163
这导致相同的结果:
90! mod (10^9+7) = 749079870
10!^9 mod (10^9+7) = 220052161
做相反的事情:
(220052161 * x) mod(10^9+7) = 1 = 23963055
然后:
(749079870*23963055) mod (10^9+7) = 998551163
没有证据,但有一些证据表明它可能有效:)
关于math - 如何以指数形式取模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130784/