1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ---------------------------------------------------------------- -- Montgomery Product (Montgomery_product.adb) -- -- A simple example of -- MP(x,y) = x.y/R mod M -- ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; procedure Montgomery_product is R: constant Natural := 256; M: constant Natural := 239; --Inv_R: constant := 225; Minus_Inv_M: constant := 241; X, Y, Product, Q, Z: Natural; begin loop Put("x = "); Get(X); Put("y = "); Get(Y); --------------------------------------------------------------------- Product := X*Y; Q := (Product + ((Product*Minus_Inv_M) mod R)*M) / R; if Q >= M then Z := Q-M; else Z := Q; end if; ---------------------------------------------------------------------- Put("x.y/R mod m = "); Put(Z); New_Line; end loop; end Montgomery_product; |
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBNb250Z29tZXJ5IFByb2R1Y3QgKE1vbnRnb21lcnlfcHJvZHVjdC5hZGIpCi0tIAotLSBBIHNpbXBsZSBleGFtcGxlIG9mCi0tIE1QKHgseSkgPSB4LnkvUiBtb2QgTQotLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCndpdGggR25hdC5JbzsgdXNlIEduYXQuSW87CnByb2NlZHVyZSBNb250Z29tZXJ5X3Byb2R1Y3QgaXMKICAgUjogY29uc3RhbnQgTmF0dXJhbCA6PSAyNTY7CiAgIE06IGNvbnN0YW50IE5hdHVyYWwgOj0gMjM5OwogICAtLUludl9SOiBjb25zdGFudCA6PSAyMjU7CiAgIE1pbnVzX0ludl9NOiBjb25zdGFudCA6PSAyNDE7CiAgIFgsIFksIFByb2R1Y3QsIFEsIFo6IE5hdHVyYWw7CmJlZ2luCiAgIGxvb3AKICAgICAgUHV0KCJ4ID0gIik7IEdldChYKTsgICAgIAogICAgICBQdXQoInkgPSAiKTsgR2V0KFkpOyAgICAgCiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBQcm9kdWN0IDo9IFgqWTsKICAgICAgUSA6PSAoUHJvZHVjdCArICgoUHJvZHVjdCpNaW51c19JbnZfTSkgbW9kIFIpKk0pIC8gUjsKICAgICAgaWYgUSA+PSBNIHRoZW4gWiA6PSBRLU07IGVsc2UgWiA6PSBROyBlbmQgaWY7IAogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIFB1dCgieC55L1IgbW9kIG0gPSAiKTsgUHV0KFopOyBOZXdfTGluZTsKICAgZW5kIGxvb3A7CmVuZCBNb250Z29tZXJ5X3Byb2R1Y3Q7CgoKCg==
-
upload with new input
-
result: Runtime error time: 0.01s memory: 1796 kB signal: -1
20 30
x = y = x.y/R mod m = 204 x = y =
raised CONSTRAINT_ERROR : prog.adb:21 range check failed
-
result: Runtime error time: 0.01s memory: 1796 kB signal: -1
x = y =
raised CONSTRAINT_ERROR : prog.adb:21 range check failed



