【问题标题】:Please discussing my Java code to find Factors(It's Correct?) [closed]请讨论我的 Java 代码以找到因素(正确吗?)[关闭]
【发布时间】:2011-07-23 00:17:32
【问题描述】:

你有解决Factor问题的另一种解决方案吗?

【问题讨论】:

  • 如果这是你的作业,你应该将作业标签添加到问题中。
  • 不,我用它来解决问题,但我会检查它是否正确。
  • 不,它不起作用:它认为 35 是质数。这几乎与您之前的问题 (stackoverflow.com/questions/6773462/…) 重复,如果您编辑它而不是发布新问题会更好。
  • 执行 %3==0 并不能证明某事很奇怪
  • @1eftHer0:有趣的错误修复方法; )。现在,对于 49 的输入,它是否符合您的预期?这可能会持续一段时间......我开始怀疑我们被拖了......

标签: java algorithm


【解决方案1】:

几厘米。首先,正如@OpenSource 指出的那样,此代码无法正常工作。您可能应该通过忘记顶层的素数来简化您的方法。素数不需要单独处理。

特定代码行上的一些 cmets:

ArrayList<Integer> list = new ArrayList<Integer>();

此时你知道有两个因数,1 和 n。为什么不立即将它们添加到列表中?

if(i > n/2) break; //optimize

如果 n 自上次以来没有更改,为什么要重新计算 n/2

if(n % i == 0) list.add(new Integer(i));

如果i 是一个因素,那么(n / i) 也是一个因素。每次收到n % i == 0 时,您都会发现两个因素。

}else if(n%3 == 0 && n%2 != 0 && n != 3 && n != 1){   //odd number

这是行不通的,而且需要付出太多努力才能做到。你已经看过偶数了,剩下的一定是奇数。

}else{ //prime

不,剩下的不是素数。还有一个偶素数。

for(int a:list){
    System.out.println(a);
}

您可能希望在打印之前先对list 进行排序。

【讨论】:

  • +1 表示努力。我发现了一件事:当心i == n / i 的情况(不要将相同的因素添加到列表中两次)。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
相关资源
最近更新 更多