# Class LongCRTMath

java.lang.Object
org.apfloat.internal.LongBaseMath
org.apfloat.internal.LongCRTMath

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `LongCarryCRTStepStrategy`

public class LongCRTMath extends LongBaseMath
Basic arithmetic for calculating the Chinese Remainder Theorem. Works for the `long` type.

Version:
  1.6
Author:
  Mikko Tommila
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LongCRTMath(int radix)`
  Creates a carry-CRT math using the specified radix.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final long`
  `add(long[] src, long[] srcDst)`
  Adds three words.
  `final long`
  `compare(long[] src1, long[] src2)`
  Compares three words.
  `final long`
  `divide(long[] srcDst)`
  Divides three words by the base to produce two words.
  `final void`
  `multiply(long[] src, long factor, long[] dst)`
  Multiplies two words by one word to produce a result of three words.
  `final void`
  `subtract(long[] src, long[] srcDst)`
  Subtracts three words.

  ### Methods inherited from class LongBaseMath

  `baseAdd, baseDivide, baseMultiplyAdd, baseSubtract`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### LongCRTMath

    public LongCRTMath(int radix)
    Creates a carry-CRT math using the specified radix.
    Parameters:
      `radix` - The radix that will be used.

- ## Method Details

  - ### multiply

    public final void multiply(long[] src, long factor, long[] dst)
    Multiplies two words by one word to produce a result of three words. Most significant word is stored first.
    Parameters:
      `src` - Source array, first multiplicand.
      `factor` - Second multiplicand.
      `dst` - Destination array.

  - ### compare

    public final long compare(long[] src1, long[] src2)
    Compares three words. Most significant word is stored first.
    Parameters:
      `src1` - First operand.
      `src2` - Second operand.
    Returns:
      Less than zero if `src1 < src2`, greater than zero if `src1 > src2` and zero if `src1 == src2`.

  - ### add

    public final long add(long[] src, long[] srcDst)
    Adds three words. Most significant word is stored first.
    Parameters:
      `src` - First operand.
      `srcDst` - Second operand, and destination of the operation.
    Returns:
      Overflow carry bit.

  - ### subtract

    public final void subtract(long[] src, long[] srcDst)
    Subtracts three words. Most significant word is stored first.
    Parameters:
      `src` - First operand.
      `srcDst` - Second operand, and destination of the operation.

  - ### divide

    public final long divide(long[] srcDst)
    Divides three words by the base to produce two words. Most significant word is stored first.
    Parameters:
      `srcDst` - Source and destination of the operation.
    Returns:
      Remainder of the division.