首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JS中给出重复的素数分解

在JS中给出重复的素数分解
EN

Stack Overflow用户
提问于 2017-07-15 03:39:44
回答 1查看 67关注 0票数 1
代码语言:javascript
复制
var userNumber = parseInt(prompt("What number would you like to have factored?"));

var factoring = function(n) {
  var m = n;
  var o = n;
  for(i = 2; i < n/2; i++) {
    if (m % i === 0 && o % i === 0) {
      var p = 0;
      while (n % i === 0) {
        n = n / i;
        p++;
      }
      n = m;
      o = o / i;
      if (p > 1) {
        console.log(i + "^" + p);    
      }
      else {
        console.log(i);
      }
    }
    else {}
  }
};

factoring(userNumber);

当我给上面的代码输入一个很大且相对复杂的输入时,它给出了错误的答案。例如,900可以提供:

代码语言:javascript
复制
2^2
3^2
5^2
6^2

前三行是正确的,但6^2只是2和3的重复。我如何使6^2不显示,以及解决其他类似的问题,如输入1000时给出的额外25?

附注:我知道这段代码需要更多的工作,但我仍然宁愿让它或多或少地按原样工作,而不是完全用其他方法替换它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-15 03:48:22

您可以通过执行n=m;将n重置为其原始值。这就是为什么你得到非素数因子的原因。而且,你也不需要o。另外,你需要运行你的外部循环直到m/2 + 1,而不仅仅是直到m/2。

代码语言:javascript
复制
var userNumber = parseInt(prompt("What number would you like to have factored?"));

var factoring = function(n) {
  var m = n;
  var o = n;
  for(i = 2; i < m/2 + 1; i++) {
    if (n % i === 0) {
      var p = 0;
      while (n % i === 0) {
        n = n / i;
        p++;
      }

      if (p > 1) {
        console.log(i + "^" + p);    
      }
      else {
        console.log(i);
      }
    }
    else {}
  }
};

factoring(userNumber);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45110492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档