在java中打印2-100的因子

时间:2017-09-30 09:31:45

标签: java

我正在尝试最小化迭代,因此我在第二个j<=i/j中使用了for loop。代码正在运行,但我无法获得完整的输出。我的意思是6的因子是2和3,但它只是打印2.

任何人都可以帮助我吗?我是初学者。

class factors{
    public static void main (String args[]){
        int i,j;
        for(i=2;i<=100;i++){
            System.out.print("\nFactors of "+i+" : ");
            for(j=2; j <= i/j; j++){
                if((i%j)==0){
                    System.out.print(j+" ");
                }
            }
        }
    }
}

4 个答案:

答案 0 :(得分:3)

后:

System.out.print(j+" ");

添加:

System.out.print((i/j)+" ");

迭代直到i/j是因为因子成对出现,ji/j,你只需迭代其中的一半,其他人就可以计算出来了从你找到的那些。

答案 1 :(得分:1)

您会收到意外的输出,因为每次迭代循环都会评估i/j

j=2i/j为3时,条件为真,并且循环的第一次迭代运行。下一次迭代j=3i/j为2,小于j,条件为false,因此循环终止,而不运行第二次迭代。

我认为你的意思是i / 2。因此,将i/j更改为i/2

答案 2 :(得分:1)

 for(j=2; j <= i/j; j++)

让我们运行i = 6的代码

首先,它将j初始化为0然后 J<=6/2所以它是真的,因为2<=3

但是在下一次迭代中 J=3然后 J<=6/3因为3<=2

而不是真的

所以改变条件。

答案 3 :(得分:0)

for(j=2; j <= i/j; j++){
    if((i%j)==0){
        System.out.print(j+" ");
    }
}

此代码中存在两个问题。

首先,您只能在找到对(jj)时打印一个因子(i/j)。已经提到过here

其次,通过打印ji/j来解决这个问题会打破完美正方形的结果,其中ji/j相同(相等)。它将平方根打印为因子两次。要解决这个问题,您可以在测试完美正方形之前停止循环。然后你可以测试循环外的特殊情况。

for (j = 2; j < i/j; j++) {
    if ((i%j) == 0) {
        System.out.print(j + " " + i/j + " ");
    }
}

if (j * j == i) {
    System.out.print(j);
}

另一种方法是在打印j之前检查i/ji/j是否相等。像

这样的东西
System.out.print(j + " ");
if (j != i/j) {
    System.out.print(i/j + " ");
}

但是这需要更多的检查而不是必要的,因为每次循环只会发生一次相等。但是你必须为你找到的每个因子对检查一次。