
//para apenas dois números o Algorítmo de Euclides é mais rápido

// greatest common divisor
Array.prototype.gcd = function() {
  var
    _aux = [],
    currFactors = null,
    _primes = [],
    dividend = 1,
    count = 1,
    smallerFactors = {},
    smallerProductCommon = 1,
    _arr = this
  ;

  _arr.map(function(item) {
    if(item < 0){
      item *= -1;
    }

    dividend = item;
    while (dividend > 1) {
      _aux.push(dividend.firstMultiple());
      dividend = dividend/dividend.firstMultiple();
  
      // para contar quantas vezes o mesmo divisor saiu
      if( dividend.firstMultiple() === (_aux[_aux.length -1]) ) {
        count++;
      } else {                    
        _primes.push(_aux[_aux.length -1]);

        // map lower factors
        if (_aux[_aux.length -1] in smallerFactors) {
          currFactors = Math.pow( (_aux[_aux.length -1]).firstMultiple(), count );
          if (currFactors < smallerFactors[_aux[_aux.length -1]] ) {
            smallerFactors[_aux[_aux.length -1]] = currFactors;
          }
        } else {
          smallerFactors[_aux[_aux.length -1]] = Math.pow( (_aux[_aux.length -1]).firstMultiple(), count);
        }

        count = 1;
        _aux = [];
      }
      
    }
  });

  // check common factors
  _primes = _primes.sort();
  _primes.map(function(n, i) {

    if(n === _primes[i+1]) {
      count++;
    } else {
      if(count === _arr.length) {
        smallerProductCommon *= smallerFactors[n];        
      }
      count = 1;
   }
   
  });

  return smallerProductCommon;
}

@@ -1,12 +1,13 @@
 %0A//
-p
+ P
 ara apen
@@ -59,16 +59,363 @@
 s r%C3%A1pido
+%0A// Considerar algumas propriedades para o algor%C3%ADtmo ficar mais r%C3%A1pido e n%C3%A3o precisar fazer conta, exemplos:%0A// Se em dois ou mais valores forem m%C3%BAltiplos do menor dentre eles, ent%C3%A3o o MDC ser%C3%A1 o menor dentre eles;%0A// Se dentre dois ou mais valores um deles for primo, ent%C3%A3o o MDC ser%C3%A1 1;%0A// Se todos os valores s%C3%A3o iguais, ent%C3%A3o o MDC %C3%A9 um deles.
 %0A%0A// gre

Update math.js