Показать сообщение отдельно
  #2 (permalink)  
Старый 06.01.2013, 01:33
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Сообщение от Demath
рекурсивно NOD(NOD(a,b),c)
Это хвостовая рекурсия, ее легко упразднить.
function NOD ( /* arguments */ ) {
  return Array.prototype.reduce.call( arguments, function ( x, y ) {
    while ( x && y ) {
      x > y ? x %= y : y %= x;
    }
    return x + y;
  });
}

alert([
  NOD( 10, 15 ),
  NOD( 111, 555, 407 ),
  NOD( 100, 200, 300, 400, 2225, 175, 19873625 ),
  NOD( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 )
].join( '\n' ));


Или более обратно совместимо
function NOD ( /* arguments */ ) {
  for ( var x = arguments[ 0 ], i = 1; i < arguments.length; i++ ) {
    var y = arguments[ i ];
    while ( x && y ) {
      x > y ? x %= y : y %= x;
    }
    x += y;
  }
  return x;
}

alert([
  NOD( 10, 15 ),
  NOD( 111, 555, 407 ),
  NOD( 100, 200, 300, 400, 2225, 175, 19873625 ),
  NOD( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 )
].join( '\n' ));

Второй вариант, по идее, должен работать быстрее.
__________________

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 06.01.2013 в 01:55.
Ответить с цитированием