如何在 java 中优化此代码?

How to optimize this code in java?

public class factorize {

public static void f(int n) {
    int i = 2;
    while( n > 1) {
        if (n%i == 0) {
            System.out.println("Factors " + i);
            n = n / i;
        }
        else {
            i++;
        }
    }
}

你好,我在java做一个factorize的函数,但是执行了很多次,网上找了一些定理,结果都是一样的。 你能告诉我一些算法来尽可能快地执行这个因式分解吗?此代码大约需要 2 分钟。

试试这个:

public static void f(int n) {
    int i = 2;
    while(i*i <= n) {
        if (n%i == 0) {
            System.out.println("Factors " + i);
            n = n / i;
        }
        else {
            i++;
        }
    }

    if (n > 1) {
        System.out.println("Factors " + n);
    }
}

之所以可行,是因为您只能有一个大于 sqrt(n) 的质因数:如果您有两个,它们的乘积将超过 n,因为 sqrt(n)*sqrt(n) = n。所以检查这些就足够了,然后如果 n > 1,剩下的 n 是另一个素数。

注意: 2732983441203969650 是一个很大的数字,不适合 int。如果您希望您的算法适用于它,您应该考虑使用 long。请注意,它的平方根也非常大,因此算法可能仍然很慢。对于如此大的数字,因式分解非常困难。您可以尝试的一种算法可能会在合适的时间内对 64 位数字起作用,它是 Pollard's Rho algorithm.

您可以在代码中优化的其他内容:

  1. 单独检查2,然后只检查被奇数整除;

  2. 使用 Sieve of Eratosthenes 生成小于 n 平方根的素数,并检查这些素数的整除性。