Пример #1
0
  public IntArray multiply(IntArray other, int m) {
    // Lenght of c is 2m bits rounded up to the next int (32 bit)
    int t = (m + 31) >> 5;
    if (m_ints.length < t) {
      m_ints = resizedInts(t);
    }

    IntArray b = new IntArray(other.resizedInts(other.getLength() + 1));
    IntArray c = new IntArray((m + m + 31) >> 5);
    // IntArray c = new IntArray(t + t);
    int testBit = 1;
    for (int k = 0; k < 32; k++) {
      for (int j = 0; j < t; j++) {
        if ((m_ints[j] & testBit) != 0) {
          // The kth bit of m_ints[j] is set
          c.addShifted(b, j);
        }
      }
      testBit <<= 1;
      b.shiftLeft();
    }
    return c;
  }