java - 大数的质因数分解

标签 java algorithm prime-factoring

<分区>

我想求出小于 10^12 的大数的质因数分解。 我得到了这段代码(在 Java 中):

public static List<Long> primeFactors(long numbers) {
        long n = numbers;
        List<Long> factors = new ArrayList<Long>();
        for (long i = 2; i <= n / i; i++) {
            while (n % i == 0) {
                factors.add(i);
                n /= i;
            }
        }
        if (n > 1) {
            factors.add(n);
        }
        return factors;
    }

首先,上述算法的复杂度是多少??我很难找到它??

此外,对于质数较大的数来说,它会太慢。

有没有更好的算法,或者如何优化这个算法??

最佳答案

如果您想对许多 大数进行因式分解,那么您最好先找到不超过 sqrt(n) 的质数。 (例如使用 Sieve of Eratosthenes )。然后你只需要检查这些质数是否是因子而不是测试所有 i <= sqrt(n) .

关于java - 大数的质因数分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251962/

相关文章:

c++ - 将文本文件解析为树状数据结构

algorithm - 给定共同的宽度和 3 个点,求 3 个矩形的长度,使它们共享一个角以形成一个三角形

algorithm - 分而治之的循环关系

java - 双类与双原始数据类型

java - 如果 HashMap 中的两个键相同,如何打印错误消息? (JAVA)

python - 查找数字中最大的素数 [Python]

java - 使用流对正整数进行质因数分解

Python - 整数分解为素数

java - 使用 Hibernate 3.6 配置 Glassfish 3

java - 使用 If 语句中定义的变量?