org.apfloat.internal
Class LongModMath

java.lang.Object
  extended by org.apfloat.internal.LongElementaryModMath
      extended by org.apfloat.internal.LongModMath
Direct Known Subclasses:
Long3NTTConvolutionStrategy, LongFactor3NTTStrategy, LongTableFNTStrategy

public class LongModMath
extends LongElementaryModMath

Modulo arithmetic functions for long data.

Version:
1.0
Author:
Mikko Tommila

Constructor Summary
LongModMath()
          Default constructor.
 
Method Summary
 long[] createWTable(long w, int n)
          Create a table of powers of n:th root of unity.
 long getForwardNthRoot(long primitiveRoot, long n)
          Get forward n:th root of unity.
 long getInverseNthRoot(long primitiveRoot, long n)
          Get inverse n:th root of unity.
 long modDivide(long a, long b)
          Modular division.
 long modInverse(long a)
          Modular inverse, that is 1 / a.
 long modPow(long a, long n)
          Modular power.
 long negate(long a)
          Modular negation.
 
Methods inherited from class org.apfloat.internal.LongElementaryModMath
getModulus, modAdd, modMultiply, modSubtract, setModulus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LongModMath

public LongModMath()
Default constructor.

Method Detail

createWTable

public final long[] createWTable(long w,
                                 int n)
Create a table of powers of n:th root of unity.

Parameters:
w - The n:th root of unity modulo the current modulus.
n - The table length (= transform length).
Returns:
Table of table[i]=wi mod m, i = 0, ..., n-1.

getForwardNthRoot

public long getForwardNthRoot(long primitiveRoot,
                              long n)
Get forward n:th root of unity. This is w.

Assumes that the modulus is prime.

Parameters:
primitiveRoot - Primitive root of the modulus.
n - The transform length.
Returns:
Forward n:th root of unity.

getInverseNthRoot

public long getInverseNthRoot(long primitiveRoot,
                              long n)
Get inverse n:th root of unity. This is w-1.

Assumes that the modulus is prime.

Parameters:
primitiveRoot - Primitive root of the modulus.
n - The transform length.
Returns:
Inverse n:th root of unity.

modInverse

public final long modInverse(long a)
Modular inverse, that is 1 / a. Assumes that the modulus is prime.

Parameters:
a - The operand.
Returns:
a-1 mod m.

modDivide

public final long modDivide(long a,
                            long b)
Modular division. Assumes that the modulus is prime.

Parameters:
a - The dividend.
b - The divisor.
Returns:
a*b-1 mod m.

negate

public final long negate(long a)
Modular negation.

Parameters:
a - The argument.
Returns:
-a mod m.

modPow

public final long modPow(long a,
                         long n)
Modular power. Assumes that the modulus is prime.

Parameters:
a - The base.
n - The exponent.
Returns:
an mod m.