2015-11-05 63 views
-1

我正在研究一種解決方案,以找到給定數字範圍的最小公倍數[1,13]; 到目前爲止,我已經設法得到一個範圍的數組: - [1,2,3,4,5,6,7,8,9,10,11,12,13] 和一個素數對於範圍內的每個數字的因子: - [[2],[3],[2,2],[5],[2,3],[7],[2,2,2],[ 3],[5,2],[2,2,3],[13]]查找數組中最經常出現的元素

我想要做的就是能夠將因子數組減少到包含大多數因子實例的數組這: - [[2,2,2],[3,3],[5],[7],[11],[13]]

有沒有什麼辦法可以實現我一直卡住在這一段時間

+0

請發佈一些關於您的環境的更多詳細信息,例如您正在使用的確切數據結構,可能包含您的代碼片段。否則,這只是一個數學/理論CS問題,並不屬於SO的範圍。 –

+0

你如何處理'[2,3]'或'[2,3,3]'? –

+0

那些不會被追求的,它找到最小公倍數的方法,應該是歐幾里得;基本上所有的2將由大多數2的陣列表示 – Craques

回答

0

使用數組作爲鍵/值對。您的密鑰可能是因數組的「字符串」表示,而值當然是{出現次數,因數組}。掃描陣列並增加相應的事件。發現的最大的發生陣列

0

基本上問題可分爲

  • 整數因子分解getFactors()
  • 因素
  • 獲取僅計數具有較高量
  • 計數的轉換的結果給陣列

function range(a, b) { 
 

 
    function getFactors(n) { 
 
     var f, count = {}; 
 
     while (n !== 1) { 
 
      f = 2; 
 
      while (n % f) { f++; } 
 
      count[f] = (count[f] || 0) + 1; 
 
      n /= f; 
 
     } 
 
     return count; 
 
    } 
 

 
    var array = [], 
 
     count = {}, 
 
     i; 
 

 
    for (i = a; i <= b; i++) { 
 
     array.push(getFactors(i)); 
 
    } 
 
    array.forEach(function (a) { 
 
     Object.keys(a).forEach(function (k) { 
 
      count[k] = Math.max(count[k] || 0, a[k]); 
 
     }); 
 
    }); 
 
    return Object.keys(count).map(function (k) { 
 
     var r = []; 
 
     while (count[k]--) { 
 
      r.push(+k); 
 
     } 
 
     return r; 
 
    }); 
 
} 
 

 
document.write('<pre>' + JSON.stringify(range(1, 13), 0, 4) + '</pre>');