|
Class: ModuloNumber (private in Integer
This class is only visible from within
Integer.
Object
|
+--Integer::ModuloNumber
- Package:
- stx:libbasic
- Category:
- Magnitude-Numbers
- Owner:
- Integer
This is a helper class to perform fast computation of the modulus.
(with big numbers, this does make a difference)
WARNING: this does only work with numbers which have no common
divisor (which is true for cryptographic applications).
So, use this only if you know what you are doing ...
[instance variables:]
modulus the modulus
reciprocal reciprocal of the modulus
shift shift count to cut off some bits
copyrightCOPYRIGHT (c) 1999 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
instance creation
-
modulus: anInteger
-
accessing
-
modulus
-
return the modulus
-
modulus: n
-
set the modulus
arithmetic
-
modulusOf: dividend
-
compute the aNumber modulo myself.
The shortcut works only, if dividend is < modulo * modulo
(When doing arithmethic modulo something).
Otherwise do it the long way
Usage example(s):
|m|
m := self new modulus:7.
m modulusOf:55.
|
Usage example(s):
fast (using moduloNumber with almost same-sized dividend and divisor):
|m|
m := self new modulus:123456789901398721398721931729371293712943794254034548369328469438562948623498659238469234659823469823658423659823658.
Time millisecondsToRun:[
100000 timesRepeat:[
m modulusOf:874928459437598375937451931729371293712943794254034548369328469438562948623498659238469234659823469823658423659823658.
]
].
10730930127807326146398409623772237722337234475792709784029183368622308259008044569184592041059181058049458041058052
|
converting
-
asInteger
-
return the modulus
-
asModuloNumber
-
17 asModuloNumber modulusOf:38
|
|