java - 减少数学分解过程中的迭代

标签 java math

我需要重构内循环方面的帮助。我想要一种更有效的方法,包括更少的迭代。

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);

这只打印出第一个因素,我一生都无法弄清楚如何让它遍历整个列表。我知道我在语义上遗漏了一些东西,但这让我抓狂。

最佳答案

您只需运行从 2Math.sqrt(i)j for 循环,因为如果您找到了一个因子ij 小于或等于 Math.sqrt(i),那么你也找到了对应的因子 i/j 大于或等于 Math.sqrt(i) 并且您也可以打印该因子(除非 j == i/j,那么不要将相同的因子打印两次)。

关于java - 减少数学分解过程中的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493989/

相关文章:

java - 如何使用方法 Object.wait(long timeout, int nanos)

java - 如何将另一个类中设置为 null 的变量的值更改为 null?

java - 如何通过 Java 包装器执行 IBM Watson Retrieve And Rank API 中的 searchAndRank 方法

检测两个矩形相交的算法?

python - 如何计算python中线上两点之间的距离

java - Apache Velocity 访问用 Java 代码创建的字符串数组?

java - 如何在 Liferay 日历中获取单个 google 重复事件的 SyncEntryId?

c# - Windows 上的 Intel Math Kernel,从 c# 调用以生成随机数

c++ - boost 区间算术和三角函数

c++ - 如何在编程中表示 sqrt(-1)?