Files
moeplayer/source/com/hurlant/math/ClassicReduction.as
T
2020-09-17 18:40:01 +08:00

35 lines
795 B
ActionScript

package com.hurlant.math
{
use namespace bi_internal;
/**
* Modular reduction using "classic" algorithm
*/
internal class ClassicReduction implements IReduction
{
private var m:BigInteger;
public function ClassicReduction(m:BigInteger) {
this.m = m;
}
public function convert(x:BigInteger):BigInteger {
if (x.s<0 || x.compareTo(m)>=0) {
return x.mod(m);
}
return x;
}
public function revert(x:BigInteger):BigInteger {
return x;
}
public function reduce(x:BigInteger):void {
x.divRemTo(m, null,x);
}
public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void {
x.multiplyTo(y,r);
reduce(r);
}
public function sqrTo(x:BigInteger, r:BigInteger):void {
x.squareTo(r);
reduce(r);
}
}
}