Bigint.Mag.modpow: def of bend-kit-bignum@0.1.0.0 Import: import bend-kit-bignum@0.1.0.0/bigint.bend as Bigint Lines 274-286 of bend-kit-bignum@0.1.0.0/bigint.bend: https://jend.leeeet.dev/read.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&start_line=274&end_line=286 import Base # b^e * acc mod m, with b and acc below m. f counts e's bits: 14 per limb, # since 10^4 < 2^14. def Mag.modpow(+f: Nat, +b: List<&2, U32>, +e: List<&2, U32>, +acc: List<&2, U32>, +m: List<&2, U32>) -> List<&2, U32>: match f: case 0n: acc case 1n+g: +h = Mag.half(e) +acc2 = Mag.if(List<&2, U32>, Mag.odd(e), u => Mag.rem(Mag.mul(acc, b), m), u => acc) Mag.if(List<&2, U32>, List.is_empty(&2, U32, h), u => acc2, u => Mag.modpow(g, Mag.rem(Mag.mul(b, b), m), h, acc2, m)) Uses (9): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.is_empty https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&name=Mag.half https://jend.leeeet.dev/definition.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&name=Mag.if https://jend.leeeet.dev/definition.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&name=Mag.mul https://jend.leeeet.dev/definition.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&name=Mag.odd https://jend.leeeet.dev/definition.txt?path=bend-kit-bignum@0.1.0.0/bigint.bend&name=Mag.rem