umontreal.iro.lecuyer.util
Class ArithmeticMod
- java.lang.Object
-
- umontreal.iro.lecuyer.util.ArithmeticMod
-
public class ArithmeticMod extends java.lang.ObjectThis class provides facilities to compute multiplications of scalars, of vectors and of matrices modulo m. All algorithms are present in three different versions. These allow operations on double, int and long. The int and long versions work exactly like the double ones.
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method and Description static voidmatMatModM(double[][] A, double[][] B, double[][] C, double m)Computes A×B mod m and puts the result in C.static voidmatMatModM(int[][] A, int[][] B, int[][] C, int m)Exactly likematMatModMusing double, but with int instead of double.static voidmatMatModM(long[][] A, long[][] B, long[][] C, long m)Exactly likematMatModMusing double, but with long instead of double.static voidmatPowModM(double[][] A, double[][] B, double m, int c)Computes Ac mod m and puts the result in B.static voidmatPowModM(int[][] A, int[][] B, int m, int c)Exactly likematPowModMusing double, but with int instead of double.static voidmatPowModM(long[][] A, long[][] B, long m, int c)Exactly likematPowModMusing double, but with long instead of double.static voidmatTwoPowModM(double[][] A, double[][] B, double m, int e)Computes A2e mod m and puts the result in B.static voidmatTwoPowModM(int[][] A, int[][] B, int m, int e)Exactly likematTwoPowModMusing double, but with int instead of double.static voidmatTwoPowModM(long[][] A, long[][] B, long m, int e)Exactly likematTwoPowModMusing double, but with long instead of double.static voidmatVecModM(double[][] A, double[] s, double[] v, double m)Computes the result of A×s mod m and puts the result in v.static voidmatVecModM(int[][] A, int[] s, int[] v, int m)Exactly likematVecModMusing double, but with int instead of double.static voidmatVecModM(long[][] A, long[] s, long[] v, long m)Exactly likematVecModMusing double, but with long instead of double.static doublemultModM(double a, double s, double c, double m)Computes (a×s + c) mod m.static intmultModM(int a, int s, int c, int m)Computes (a×s + c) mod m.static longmultModM(long a, long s, long c, long m)Computes (a×s + c) mod m.
-
-
-
Method Detail
-
multModM
public static double multModM(double a, double s, double c, double m)Computes (a×s + c) mod m. Where m must be smaller than 235. Works also if s or c are negative. The result is always positive (and thus always between 0 and m - 1).- Parameters:
a- the first factor of the multiplications- the second factor of the multiplicationc- the second term of the additionm- the modulus- Returns:
- the result of the multiplication and the addition modulo m
-
matVecModM
public static void matVecModM(double[][] A, double[] s, double[] v, double m)Computes the result of A×s mod m and puts the result in v. Where s and v are both column vectors. This method works even if s = v.- Parameters:
A- the multiplication matrixs- the multiplied vectorv- the result of the multiplicationm- the modulus
-
matMatModM
public static void matMatModM(double[][] A, double[][] B, double[][] C, double m)Computes A×B mod m and puts the result in C. Works even if A = C, B = C or A = B = C.- Parameters:
A- the first factor of the multiplicationB- the second factor of the multiplicationC- the result of the multiplicationm- the modulus
-
matTwoPowModM
public static void matTwoPowModM(double[][] A, double[][] B, double m, int e)Computes A2e mod m and puts the result in B. Works even if A = B.- Parameters:
A- the matrix to raise to a powerB- the result of exponentiationm- the moduluse- the log2 of the exponent
-
matPowModM
public static void matPowModM(double[][] A, double[][] B, double m, int c)Computes Ac mod m and puts the result in B. Works even if A = B.- Parameters:
A- the matrix to raise to a powerB- the result of the exponentiationm- the modulusc- the exponent
-
multModM
public static int multModM(int a, int s, int c, int m)Computes (a×s + c) mod m. Works also if s or c are negative. The result is always positive (and thus always between 0 and m - 1).- Parameters:
a- the first factor of the multiplications- the second factor of the multiplicationc- the second term of the additionm- the modulus- Returns:
- the result of the multiplication and the addition modulo m
-
matVecModM
public static void matVecModM(int[][] A, int[] s, int[] v, int m)Exactly likematVecModMusing double, but with int instead of double.- Parameters:
A- the multiplication matrixs- the multiplied vectorv- the result of the multiplicationm- the modulus
-
matMatModM
public static void matMatModM(int[][] A, int[][] B, int[][] C, int m)Exactly likematMatModMusing double, but with int instead of double.- Parameters:
A- the first factor of the multiplicationB- the second factor of the multiplicationC- the result of the multiplicationm- the modulus
-
matTwoPowModM
public static void matTwoPowModM(int[][] A, int[][] B, int m, int e)Exactly likematTwoPowModMusing double, but with int instead of double.- Parameters:
A- the matrix to raise to a powerB- the result of exponentiationm- the moduluse- the log2 of the exponent
-
matPowModM
public static void matPowModM(int[][] A, int[][] B, int m, int c)Exactly likematPowModMusing double, but with int instead of double.- Parameters:
A- the matrix to raise to a powerB- the result of the exponentiationm- the modulusc- the exponent
-
multModM
public static long multModM(long a, long s, long c, long m)Computes (a×s + c) mod m. Works also if s or c are negative. The result is always positive (and thus always between 0 and m - 1).- Parameters:
a- the first factor of the multiplications- the second factor of the multiplicationc- the second term of the additionm- the modulus- Returns:
- the result of the multiplication and the addition modulo m
-
matVecModM
public static void matVecModM(long[][] A, long[] s, long[] v, long m)Exactly likematVecModMusing double, but with long instead of double.- Parameters:
A- the multiplication matrixs- the multiplied vectorv- the result of the multiplicationm- the modulus
-
matMatModM
public static void matMatModM(long[][] A, long[][] B, long[][] C, long m)Exactly likematMatModMusing double, but with long instead of double.- Parameters:
A- the first factor of the multiplicationB- the second factor of the multiplicationC- the result of the multiplicationm- the modulus
-
matTwoPowModM
public static void matTwoPowModM(long[][] A, long[][] B, long m, int e)Exactly likematTwoPowModMusing double, but with long instead of double.- Parameters:
A- the matrix to raise to a powerB- the result of exponentiationm- the moduluse- the log2 of the exponent
-
matPowModM
public static void matPowModM(long[][] A, long[][] B, long m, int c)Exactly likematPowModMusing double, but with long instead of double.- Parameters:
A- the matrix to raise to a powerB- the result of the exponentiationm- the modulusc- the exponent
-
-
DMelt 3.0 © DataMelt by jWork.ORG