【问题标题】:Reducing the number of inner loop iterations in Java for efficiency减少 Java 中的内部循环迭代次数以提高效率
【发布时间】:2016-03-04 15:08:52
【问题描述】:

这是来自 Java 教科书的小挑战。 以下代码可以提高效率(通过减少内部循环迭代的次数,可能使用continue 语句)。

/*
    Use nested loops to find factors of numbers
    between 2 and 100. 

    In the program, the outer loop runs i from 2 through 100. The inner loop successively tests
    all numbers from 2 up to i, printing those that evenly divide i.

*/

class FindFactors {
    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();
        }
    }
}

但是我尝试“简化”只是增加了更多步骤。有什么想法吗?

【问题讨论】:

  • 检查 j 是否小于 i/2 永远不会有大于 i 一半的因子
  • 你也可以计算出它的反因数,然后你就可以把极限设为i的sqrt

标签: java loops for-loop nested continue


【解决方案1】:

在内部循环测试中,并非所有数字都达到 i。如果你只测试 i 的一半就足够了

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

【讨论】:

  • 最大因子等于或小于 i 的一半
  • 如果在发现较小的因子时拉出较大的因子,您可以将循环进一步限制为小于或等于sqrt(i) 的因子。
【解决方案2】:
for (int j = 2; j < i; j++)

不要试图破坏它,考虑一个自然数 N 来计算因子。也许您可以减少必须检查的数字数量?

查找分解整数以获取更多信息/不同的算法。

【讨论】:

    【解决方案3】:

    在外循环索引的平方上设置内循环的长度 每个数字的最大因子是他的平方

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 2014-05-26
      • 2018-08-04
      相关资源
      最近更新 更多