使数字的素数因子化迅速小于100 ^ 100

时间:2016-10-08 06:22:50

标签: prime-factoring

我想制作一个程序,可以比较大小为100 ^ 100的数字的素数因子分解。我希望程序告诉我,例如,在素数因子化中是否存在2,但我不想知道有多少......而且我想要比较两个数字的素数因子化。有人可以帮忙吗?难度实际上是数字的大小...以及程序的效率......我想比较两个数字只需要最多10秒......

我有这个;

import java.util.ArrayList;
import java.util.List;

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

    public static void main(String[] args) {
            System.out.println("Primefactors of 44");
            for (Integer integer : primeFactors(12345678901)) {
                    System.out.println(integer);
            }
    }
}

这段代码适用于Java,但我主要是寻找有效的东西,所以我愿意改变语言......

2 个答案:

答案 0 :(得分:1)

一般来说,您无法找到数量大的因素。但是如果你只想知道除了多重性之外两个数字是否具有相同的因素,那么它相当容易。使用欧几里德算法找到两个数字的最大公因子。如果结果为1,则数字是互质的,并且没有相同的因素。否则,将最大公因子计入素数;这应该比分解两个大数字容易得多,因为它可能要小得多。然后将每个大数除以每个公共素因子,直到它没有均匀分配;如果在除以所有共同素数因子后,两个余数相同,则可以声明两个原始数字具有相同的素数因子但具有不同的多重性,否则您知道它们具有不是“素数因子”的素数因子。共享。询问您是否需要了解更多信息。

这是一个相当奇怪的请求。你的用例是什么?也许还有其他方法可以解决潜在的问题。

答案 1 :(得分:0)

这些是巨大的整数。使用一个巨大的整数库,通过分配低因子,你可以很快地将它们中的大部分降低到非常低的值,但不是全部 - 素数并不常见。

但是你不需要这些因素,你需要知道两个数字是否有共同的因素。我相信这是一个考验。它相当复杂,有点超出我的数学专业知识,但它是一个组件或随机素性测试。