我试图在Java
中获得从2到100的数字因子。
boolean bSqrt = true;
int sqrt;
for (int i = 2; i <= 100; i++) {
System.out.print("Factors of " + i + ": ");
sqrt = (int) Math.sqrt(i);
for (int j = 2; j <= sqrt; j++) {
if ((i % j) == 0) {
if(j != sqrt)
System.out.print(j + " ");
if (j != (i / j))
System.out.print(i / j + " ");
if (bSqrt & sqrt != (i / j) & sqrt != j & ((i % sqrt) == 0)) {
System.out.print(sqrt + " ");
bSqrt = false;
}
}
}
bSqrt = true;
System.out.println();
}
但是这段代码无法得到4,6,8,25等的正确答案。这可能是因为它迭代了i
的sqrt,也因为条件&#39; if(j) != sqrt)&#39; (这是因为因子j
有时可以等于i
的sqrt,sqrt肯定是i
的因子,稍后会在代码中打印出来。所以我想知道如何修复代码并改进代码以提供正确的答案。
答案 0 :(得分:0)
提示:您需要了解sqrt优化背后的数学;即在内循环中不迭代到100的数学证明。 (这很简单......)
一旦你理解了这一点,看看你的代码实际在那时做了什么......并将它与你的(新的)数学理解所说的应该正在做。