|
Class: ModuloNumber (private in Integer
This class is only visible from within
Integer.
Object
|
+--Integer::ModuloNumber
- Package:
- stx:libbasic
- Category:
- Magnitude-Numbers
- Owner:
- Integer
- Author:
- Stefan Vogel
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
Integer
SmallInteger
LargeInsteger
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):
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
|
|