private static void PowPm5d8(int[] x, int[] rx2, int[] rz)
{
// z = x^((p-5)/8) = x^FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
// (250 1s) (1 0s) (1 1s)
// Addition chain: [1] 2 3 5 10 15 25 50 75 125 [250]
int[] x2 = rx2; Sqr(x, x2); Mul(x, x2, x2);
int[] x3 = Create(); Sqr(x2, x3); Mul(x, x3, x3);
int[] x5 = x3; Sqr(x3, 2, x5); Mul(x2, x5, x5);
int[] x10 = Create(); Sqr(x5, 5, x10); Mul(x5, x10, x10);
int[] x15 = Create(); Sqr(x10, 5, x15); Mul(x5, x15, x15);
int[] x25 = x5; Sqr(x15, 10, x25); Mul(x10, x25, x25);
int[] x50 = x10; Sqr(x25, 25, x50); Mul(x25, x50, x50);
int[] x75 = x15; Sqr(x50, 25, x75); Mul(x25, x75, x75);
int[] x125 = x25; Sqr(x75, 50, x125); Mul(x50, x125, x125);
int[] x250 = x50; Sqr(x125, 125, x250); Mul(x125, x250, x250);
int[] t = x125;
Sqr(x250, 2, t);
Mul(t, x, rz);
}