你有解决因子问题的另一种解决方案吗?
答案 0 :(得分:5)
一些评论。首先,正如@OpenSource所指出的,这段代码无法正常工作。你应该通过忘记顶层的素数来简化你的方法。 Primes不需要单独处理。
对特定代码行的一些评论:
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
。