21 lines
403 B
Plaintext
21 lines
403 B
Plaintext
expon := function(a, n, one, mul)
|
|
local p;
|
|
p := one;
|
|
while n > 0 do
|
|
if IsOddInt(n) then
|
|
p := mul(a, p);
|
|
fi;
|
|
a := mul(a, a);
|
|
n := QuoInt(n, 2);
|
|
od;
|
|
return p;
|
|
end;
|
|
|
|
expon(2, 10, 1, \*);
|
|
# 1024
|
|
|
|
# a more creative use of exponentiation
|
|
List([0 .. 31], n -> (1 - expon(0, n, 1, \-))/2);
|
|
# [ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
|
|
# 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1 ]
|