【问题标题】:Modulo Power function in JJ 中的模幂函数
【发布时间】:2015-06-13 23:24:59
【问题描述】:

如果我想计算 a^b mod c 那么有一种有效的方法可以做到这一点,而无需完整计算 a^b。

然而,在编程时,如果我写f g x,那么无论f如何,都会计算g(x)。

J 在特殊情况下提供了 f 和 g 的合成,模幂函数就是其中之一。例如,以下运行速度非常快。

1000&| @ (2&^) 10000000x

这是因为'atop' 连词@ 告诉语言尽可能组合函数。如果我删除它,它会慢得难以忍受。

但是,如果我想使用 x^x ,那么 ^~ 将不再有效,并且我会遇到大值的限制错误。然而,绑定这些大值确实有效。

所以

999&| @ (100333454&^) 100333454x

执行得又快又好,但是

999&| @ ^~ 100333454x

给我一​​个限制错误 - RHS 太大了。

我是否认为在这种情况下,J 没有使用高效的幂模算法?

【问题讨论】:

    标签: modulo j exponentiation


    【解决方案1】:

    https://github.com/Pascal-J/BN-openssl-bindings-for-J

    包括 openssl 的绑定(在 windows 上与 J 一起分发,并预安装在所有其他兼容系统上)的 BN 库,包括 modexp。由于从 J 转换为 "C" (BN) 的参数较少,x ^ x 的情况会特别有效

    【讨论】:

      【解决方案2】:

      根据special code page

      m&|@^       dyad    avoids exponentiation for integer arguments
      m&|@(n&^)   monad   avoids exponentiation for integer arguments
      

      特殊代码不支持^~ 的大小写。

      【讨论】:

        猜你喜欢
        • 2020-05-14
        • 1970-01-01
        • 2010-11-29
        • 2013-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多