【问题标题】:Find common Factor of two values找到两个值的公因数
【发布时间】:2017-01-07 19:51:52
【问题描述】:

我有以下 javascript 代码来计算数字的因数。

var some = [];
var main = "";
var final = "";

function text(data) {
  spliter = data.split(",");

  var k = 0;
  while (k < spliter.length) {
    var meethi = 0;;
    main = spliter[k];

    var datas = "";
    for (var i = 1; i <= 10; i += 1) {
      meethi = Math.abs(main / i);
      datas = meethi;
      some.push('' + datas + '');
    }
    some.forEach(myFunction);
    final += res + '<br>';
    k++;
  }

  return final;
}
var max = 0;
var res = "";

function myFunction(item) {
  var van = item.split(".");
  if (van[1] == undefined) {
    var high = Math.floor(main / van[0]);
    if (high > max) {
      max = high;
      res += max + ':';
    }
  }
}
document.getElementById('demo').innerHTML = text('124,20');
&lt;p id="demo"&gt;&lt;/p&gt;

我的程序获取具有两个值的因子。如何确定两个值的公因数,只有最大公因数?

例如('124,20') output --&gt; 4

我根据自己的知识尝试了代码。如果您对代码有任何其他建议,请告诉我并用我想要的结果更正我的代码。

my fiddle

【问题讨论】:

  • 看来你可以计算出因子,所以公因子是出现在两个列表中的那些。那么你的问题是什么?在您的示例中还有 3 个共同因素(1,2 和 4),那么为什么您只想要 4 作为结果?
  • @jamiec ya..正确..需要两者的共同因素。只有最高的comman值。
  • 嗯,没错,这就是所谓的最大公分母,从给出的答案中可以看出,这是一个众所周知的问题。

标签: javascript for-loop math while-loop


【解决方案1】:

您可以使用最大公约数 Euclid's algorithm

function gcd(k, n) {
    return k ? gcd(n % k, k) : n;
}

console.log(gcd(124, 20));
console.log([10, 500, 600].reduce(gcd));

【讨论】:

  • 当一个问题的答案在公元前 300 年制定时,你不只是喜欢它吗!
  • “所有算法中的鼻祖,因为它是幸存至今的最古老的非平凡算法。” [donald knuth]
  • 谢谢..只有两个值。如果更多两个像('10,500,600').我该怎么办?
  • 您可以使用Array#reducegcd 作为回调,因为您可以将gcd 与之前计算的结果链接起来。
  • 。你能解释一下如何执行 n % k 吗?
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
相关资源
最近更新 更多