Coverage Report - br.org.agilcoop.cursos.testes.unidade.MathHelper
 
Classes in this File Line Coverage Branch Coverage Complexity
MathHelper
0%
0/27
0%
0/28
4.25
 
 1  
 package br.org.agilcoop.cursos.testes.unidade;
 2  
 
 3  0
 public class MathHelper {
 4  
         
 5  
         public static long mdcAlgoritmoSuperLento(long a, long b) {
 6  0
                 long maior = Math.max(a, b);
 7  0
                 long menor = Math.min(a, b);
 8  0
                 if(maior < 0 || menor < 0) throw new IllegalArgumentException("must be positive");
 9  0
                 if(maior == 0  || menor == 0) return 0;
 10  
                 // 10 e 5 = 5
 11  0
                 long mdc = 1;
 12  0
                 for(long i = 2; i <= menor; i++) {
 13  0
                         if(maior % i == 0 && menor % i == 0)
 14  0
                                 mdc = i;
 15  
                 }
 16  0
                 return mdc;
 17  
         }
 18  
         
 19  
         // Algoritmo de Euclides: mdc(a, b) = mdc(b, r) onde r: a = q * b + r
 20  
         public static long mdcAlgoritmoEuclides(long a, long b) {
 21  0
                 long valor = Math.max(a, b);
 22  0
                 long divisor = Math.min(a, b);
 23  0
                 if(valor < 0 || divisor < 0) throw new IllegalArgumentException("must be positive");
 24  0
                 if(valor == 0  || divisor == 0) return 0;
 25  0
                 long resto = valor % divisor;                
 26  0
                 while(resto != 0) {
 27  0
                         valor = divisor;
 28  0
                         divisor = resto;
 29  0
                         resto = valor % divisor;
 30  
                 }
 31  0
                 return divisor;
 32  
         }
 33  
 
 34  
         //        Dois números naturais sempre têm divisores comuns.
 35  
         public static long mdc(long a, long b) {
 36  0
                 return mdcAlgoritmoEuclides(a, b);
 37  
         }
 38  
         
 39  
         // calcula (num^exp) mod n
 40  
         //http://en.wikipedia.org/wiki/Modular exponentiation
 41  
         public static long potenciaModulo(long num, long exp, long n) {
 42  0
                 long result = 1;                
 43  0
                 while (exp > 0) {
 44  0
                         if ((exp & 1) > 0) result = (result * num) % n;
 45  0
                         exp >>= 1;
 46  0
                         num = (num * num) % n;
 47  
                 }                
 48  0
                 return result;
 49  
         }
 50  
 
 51  
 }