当前位置: 首页 > 面试题库 >

大量的素数分解

甄成弘
2023-03-14
问题内容

我想找到小于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)(例如使用Eratosthenes的Sieve)。然后,您只需要检查那些质数是否是因数,而不是全部测试i <= sqrt(n)



 类似资料:
  • 问题内容: 我有很多对象,我需要将它们分成两个组成一组,以供UI助手使用。 例: 通过这四个数组成为一个数组 有很多分割数组的方法。但是,如果阵列很大,什么是最有效的(成本最低)。 问题答案: 如果您正在寻找效率,则可以使用一种方法来懒散地生成每个包含2个元素的数组,因此您一次只能在内存中存储2个元素: 此方法适用于任何Array,而不仅限于Arrays。 对于Swift 1,没有协议扩展,您将拥

  • 对于物理缩放任何UIImage的方法,我需要创建位图上下文,除了目标宽度和高度之外,它与图像具有完全相同的设置。 这是我目前的代码。缺少什么:如何为CGBitmapContextCreate的bytesPerRow参数确定CGImage每像素的组件数? CGContextRef ctx=CGBitmapContextCreat(NULL,德宽,德高,bitsPerComponent, bytesP

  • 根据给定的函数对数组的元素进行分组,并返回每个分组中元素的数量。 使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的键是从映射的结果中产生的。 const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce

  • 在Apache Spark中, -允许将RDD精确划分为分区。 而是如何将给定的RDD划分成分区,使得所有分区(最后一个分区除外)都具有指定数量的元素。鉴于RDD元素的数量是未知的,做<代码>。count()的开销很大。 预期:

  • 我假设eclipse中存在一些限制,阻止将大量数字打印到控制台。 编辑:在5572处,控制台的输出将被清除,这是输出: 你想看多少个素数?5572

  • 我在研究Euler项目的问题,这是问题五: 最大素因子问题3 13195的素因子为5、7、13和29。 600851475143的最大质因数是什么? 我得到了工作代码: 因数(19*19*19*19*19*19*19*19*19*1999989899) x=33170854034208712,最后一个系数=182128674 33170854034208712 有人知道为什么这没有得到正确的答案吗