我需要帮助重构内循环。我想要一种更有效的方法,包括更少的迭代。
public static void main(String[] args) {
for (int i = 2; i <= 100; i++) {
System.out.print("Factors of " + i + ": ");
for (int j = 2; j < i; j++)
if ((i % j) == 0)
System.out.print(j + " ");
System.out.println();
}
}
这是我到目前为止所尝试的内容:
int j = 2;
do{
if ((i % j) == 0) System.out.print(j + " ");
System.out.println();
j++;
} while (j < 2);
这只打印出第一个因素,我不能为我的生活找出如何通过整个列表。我知道我在语义上遗漏了一些东西,但这让我把头发拉了出来。
答案 0 :(得分:3)
您只需要从j
到2
运行Math.sqrt(i)
for循环,因为如果您找到j
i
因子{}}大于或等于Math.sqrt(i)
,您还找到了大于或等于i/j
的相应因子Math.sqrt(i)
,您也可以打印该因子(除非j == i/j
,那么两次不要打印相同的因子。)
答案 1 :(得分:1)
您无需迭代i
。只需sqrt(i)
。
public static void main(String[] args) {
for(int i= 2 ; i <= 100 ; i++ ) {
System.out.print("Factors of " + i + ": ");
int limit= (int)Math.sqrt(i) ;
for(int j= 2 ; j <= limit ; j++ )
if( i % j == 0 ) {
System.out.print( j + " " );
System.out.print( (i/j) + " " );
}
System.out.println();
}
}
顺便说一下,你需要所有的除数吗?素因子中的分解要快得多。结果也更简洁,易于理解和使用。
答案 2 :(得分:1)
有许多可能的优化。这里只是几个:
j
是一个因素,那么i/j