Ocena użytkownikóww: ***** / 1
Nadesłany przez Tomasz Lubiński, 13 listopada 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
SPM.adb:
--
-- Szybkie Potegowanie modulo
--
-- www.algorytm.org
-- (c)2006 Tomasz Lubinski
--
with Text_IO;
use Text_IO;
with Interfaces;
use Interfaces;
procedure SPM is
function power_modulo_fast(a: Integer; b: Unsigned_32; m: Integer) return Integer is
i: Unsigned_32;
result: Integer := 1;
x: Integer := a mod m;
begin
i := 1;
while i<=b loop
x := x mod m;
if (b and i) /= 0 then
result := result * x;
result := result mod m;
end if;
x := x*x;
i := i * 2;
end loop;
return (result);
end;
begin
-- 9688563^45896 mod 71 = 30
Put_Line("9688563^458926 mod 71 = " & Integer'Image(power_modulo_fast(9688563, 458926, 71)));
-- 12^53 mod 7 = 3
Put_Line("12^53 mod 7 = " & Integer'Image(power_modulo_fast(12, 53, 7)));
end;