use*_*733 5 j modulo exponentiation
如果我想计算一个^ b mod c,那么有一种有效的方法可以做到这一点,而无需完全计算^ b.
然而,当编程时,如果我写,f g x则无论如何计算g(x)f.
J在特殊情况下提供了f和g的组合,模幂函数就是其中之一.例如,以下运行速度非常快.
1000&| @ (2&^) 10000000x
Run Code Online (Sandbox Code Playgroud)
这是因为'atop'连接@告诉语言如果可能的话组成函数.如果我删除它,它会慢得令人难以忍受.
但是,如果我想使用x ^ x,则^~不再有效,并且我得到大值的限制错误.然而,绑定那些大值确实有效.
所以
999&| @ (100333454&^) 100333454x
Run Code Online (Sandbox Code Playgroud)
执行得很快很快但是
999&| @ ^~ 100333454x
Run Code Online (Sandbox Code Playgroud)
给了我一个极限错误 - RHS太大了.
我是否正确地认为在这种情况下,J没有使用高效的幂模数算法?
根据特殊代码页:
m&|@^ dyad avoids exponentiation for integer arguments
m&|@(n&^) monad avoids exponentiation for integer arguments
Run Code Online (Sandbox Code Playgroud)
^~特殊代码不支持这种情况。