<commit_before>// Considerar algumas propriedades para o algorítmo ficar mais rápido e não precisar fazer conta, exemplos:
// Para apenas dois números o Algorítmo de Euclides é mais rápido
// Se em dois ou mais valores forem múltiplos do menor dentre eles, então o MDC será o menor dentre eles;
// Seja n a quantidade de termos a ser calculado o MDC, se n <= 3, se um dos termos for primo, então o MDC será 1
// Senão se dois termos forem primos, então o MDC também será 1, visto que dois números primos distintos nunca serão
// múltiplos entre si, visto que são múltiplos apenas deles mesmos e de 1.
// Se todos os valores são iguais, então o MDC é um deles.

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

  _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 smaller 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;
}<commit_msg>Update math.js<commit_after>// Considerar algumas propriedades para o algorítmo ficar mais rápido e não precisar fazer conta, exemplos:
// Para apenas dois números o Algorítmo de Euclides é mais rápido
// Se em dois ou mais valores forem múltiplos do menor dentre eles, então o MDC será o menor dentre eles;
// Seja n a quantidade de termos a ser calculado o MDC, se n <= 3, se um dos termos for primo, então o MDC será 1
// Senão se dois termos forem primos, então o MDC também será 1, visto que dois números primos distintos nunca serão
// múltiplos entre si, visto que são múltiplos apenas deles mesmos e de 1.
// Se todos os valores são iguais, então o MDC é um deles.

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

  _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 smaller factors
        powFactor = Math.pow( (_aux[_aux.length -1]).firstMultiple(), count );

        if( _aux[_aux.length -1] in smallerFactorsHash ) {
          if( powFactor < smallerFactorsHash[_aux[_aux.length -1]] ) {
            smallerFactorsHash[_aux[_aux.length -1]] = powFactor;
          }
        } else {
          smallerFactorsHash[_aux[_aux.length -1]] = powFactor;
        }

        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 *= smallerFactorsHash[n];
      }
      count = 1;
   }

  });

  return smallerProductCommon;
}
{'fraction_non_alphanumeric': 0.11443250817375059, 'fraction_numerical': 0.009574964969640354, 'mean_word_length': 2.299691833590139, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3421004', 'n_tokens_mistral': 1486, 'n_tokens_neox': 1424, 'n_words': 429}