BigInteger bitwise Gcd : BigInteger « Data Type « Java






BigInteger bitwise Gcd

 

/*
 * @(#)MathUtil.java  1.0 Apr 26, 2008
 *
 *  The MIT License
 *
 *  Copyright (c) 2008 Malachi de AElfweald <malachid@gmail.com>
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in
 *  all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *  THE SOFTWARE.
 */
 
 
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;



public class Util{
  protected static BigInteger BigIntegerZERO = BigInteger.ZERO;
  protected static BigInteger BigIntegerONE = BigInteger.ONE;
  protected static BigInteger BigIntegerTWO = BigInteger.valueOf(2);
  protected static BigInteger BigIntegerTHREE=BigInteger.valueOf(3);
  protected static BigInteger FactorialBreakpoint = BigInteger.valueOf(96);
  protected static BigDecimal BigDecimalZERO = BigDecimal.ZERO;
  protected static BigDecimal BigDecimalONE = BigDecimal.ONE;
  protected static BigDecimal BigDecimalTWO = new BigDecimal(2);
  protected static BigDecimal BigDecimalFOUR = new BigDecimal(4);
  
  public static BigInteger bitwiseGcd(BigInteger u, BigInteger v)
  {
    if(u.equals(BigInteger.ZERO)) return v;
    if(v.equals(BigInteger.ZERO)) return u;

//    System.out.format("u=%s=%s\nu.getLowestSetBit()=%s\n%s>>%s=%s = %s\n", u, u.toString(2), u.getLowestSetBit(), u, u.getLowestSetBit(), u.shiftRight(u.getLowestSetBit()), u.shiftRight(u.getLowestSetBit()).toString(2));

    int uBit = u.getLowestSetBit();
    int vBit = v.getLowestSetBit();
    int k = (uBit <= vBit ? uBit : vBit);

    while(u.signum() > 0)
    {
      // first ensure that both are odd
      u = u.shiftRight(u.getLowestSetBit());
      v = v.shiftRight(v.getLowestSetBit());
      if(u.subtract(v).signum() >= 0)
      {
        u = (u.subtract(v)).shiftRight(1);
      }else{
        v = (v.subtract(u)).shiftRight(1);
      }
    }

    return v.shiftLeft(k);
  }
}

   
  








Related examples in the same category

1.BigInteger.isProbablePrime
2.Compute the Palindrome of a number by adding the number composed of
3.Operating with Big Integer Values
4.Create BigInteger via string
5.Create BigInteger via long type variable
6.Multiply one BigInteger to another BigInteger
7.Subtract one BigInteger from another BigInteger
8.Divide one BigInteger from another BigInteger
9.Negate a BigInteger
10.Calculate the power on a BigInteger
11.Create BigInteger from byte array
12.Performing Bitwise Operations with BigInteger
13.Get the value of a bit
14.Set a bit for BigInteger
15.Clear a bit in a BigInteger
16.Flip a bit in a BigInteger
17.Shift the bits in a BigInteger
18.Shift right in a BigInteger
19.xor a BigInteger
20.and operation on BigInteger
21.not operation for BigInteger
22.or operation for BigInteger
23.antNot operation on BigInteger
24.Retrieve the current bits in a byte array in twos-complement form.
25.Parsing and Formatting a Big Integer into Binary
26.Parsing and Formatting a Big Integer into octal
27.Parsing and Formatting a Big Integer into decimal
28.Parse and format to hexadecimal
29.Parse and format to arbitrary radix <= Character.MAX_RADIX
30.Create a BigInteger using the byte array
31.Parsing and Formatting a Byte Array into Binary
32.Parsing and Formatting a Byte Array into Octal
33.Parsing and Formatting a Byte Array into decimal
34.Parsing and Formatting a Byte Array into Hexadecimal
35.Parse binary string
36.Get byte array from BigInteger
37.Parse octal string to create BigInteger
38.Parse decimal string to create BigInteger
39.Parse hexadecimal string to create BigInteger
40.Convert BigInteger into another radix number
41.Do math operation for BigInteger
42.Operate with big integer values in code
43.Demonstration of high-precision integer arithmetic with the BigInteger classDemonstration of high-precision integer arithmetic with the BigInteger class
44.This program uses big numbers to compute the odds of winning the grand prize in a lottery.
45.BigInteger lowest numBits
46.BigInteger highest numBits
47.Is one BigInteger Divisible by another BigInteger
48.Is a BigInteger Even