diff --git a/src/main/java/mattrixwv/Algorithms.java b/src/main/java/mattrixwv/Algorithms.java index 1fd1a8b..08252b7 100644 --- a/src/main/java/mattrixwv/Algorithms.java +++ b/src/main/java/mattrixwv/Algorithms.java @@ -727,31 +727,37 @@ public class Algorithms{ } //This function returns the GCD of the two numbers sent to it public static int gcd(int num1, int num2){ - int gcd = 1; - for(int cnt = 1;(cnt <= num1) && (cnt <= num2);++cnt){ - if(((num1 % cnt) == 0) && ((num2 % cnt) == 0)){ - gcd = cnt; + while((num1 != 0) && (num2 != 0)){ + if(num1 > num2){ + num1 %= num2; + } + else{ + num2 %= num1; } } - return gcd; + return num1 | num2; } public static long gcd(long num1, long num2){ - long gcd = 1; - for(long cnt = 1;(cnt <= num1) && (cnt <= num2);++cnt){ - if(((num1 % cnt) == 0) && ((num2 % cnt) == 0)){ - gcd = cnt; + while((num1 != 0) && (num2 != 0)){ + if(num1 > num2){ + num1 %= num2; + } + else{ + num2 %= num1; } } - return gcd; + return num1 | num2; } public static BigInteger gcd(BigInteger num1, BigInteger num2){ - BigInteger gcd = BigInteger.ONE; - for(BigInteger cnt = BigInteger.ONE;(cnt.compareTo(num1) <= 0) && (cnt.compareTo(num2) <= 0);cnt.add(BigInteger.ONE)){ - if(num1.mod(cnt).equals(BigInteger.ZERO) && num2.mod(cnt).equals(BigInteger.ZERO)){ - gcd = cnt; + while(!num1.equals(BigInteger.ZERO) && !num2.equals(0)){ + if(num1.compareTo(num2) > 0){ + num1 = num1.mod(num2); + } + else{ + num2 = num2.mod(num1); } } - return gcd; + return num1.or(num2); } //This function returns the sum of all elements in the list public static int getSum(ArrayList nums){