ellpow(E, P, m) は常に例外をスローします。
*** ellpow: impossible inverse modulo: Mod(x, y).
*** Break loop: type 'break' to go back to GP
ここで、x と y は整数です。
後で使用するために、プログラムを終了せずに値 x をトラップしたい。
コードのスニペットは次のとおりです。
trap(invmoder,
x,
ellpow(E, P, m)
), n);
プログラム全体は次のとおりです。
ellcurv(n) = {
local(B, a1, a2, a3, a4, a6, b, E, P, m, x);
B = 20;
a4 = Mod(random(n), n);
b = 4*a4^3 + 27;
b = 1/b;
a1 = a2 = a3 = Mod(0, n);
a6 = Mod(1, n);
E = ellinit([a1, a2, a3, a4, a6]);
P = [0,1];
ellisoncurve(E, P);
m = 1;
for(i = 1, B,
m = lcm(m, i));
print(m);
x = gcd(
trap(,
ellpow(E, P, m),
ellpow(E, P, m)
), n);
}