J中的模幂功能

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没有使用高效的幂模数算法?

Eel*_*vex 2

根据特殊代码页

m&|@^       dyad    avoids exponentiation for integer arguments
m&|@(n&^)   monad   avoids exponentiation for integer arguments
Run Code Online (Sandbox Code Playgroud)

^~特殊代码不支持这种情况。