微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助计算直到给定数字的每个数字的不同质因数的数量

如何解决需要帮助计算直到给定数字的每个数字的不同质因数的数量

我想计算直到 n 的每个整数的不同质因数的数量。例如,12 = 2 * 2 * 3,所以它有 2 个不同的质因数,2 和 3。我想将这些值中的每一个存储在一个数组 result[] 中,大小为 n+1,其中 result[i]包含整数 i 的不同质因数的个数。

我必须在我的解决方案中使用以下外部方法

sizeof

它使用 Eratosthenes 的筛子返回一个直到 n 的所有素数的列表。这是我的解决方案:

{
  "context": [ "/images" ],"target" : "http://localhost:5000","secure": false,"changeOrigin": true,"logLevel": "debug"
}

这个算法产生了正确的结果,但是,我希望能够测试 n

非常感谢您的帮助:)

解决方法

这绝对不是最有效的算法,但在我的旧电脑 (i5 3570K) 上,它可以运行到 5_000_000 略多于 10 秒。 5_000_000 的结果数组总和为 14838426。

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

public class Main {

    public static List<Integer> primeFactors(int number) {
        int n = number;
        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) {
        int[] result = new int[5_000_001];
        for (int i = 0; i < result.length; i++) {
            result[i] = (int) primeFactors(i).stream().distinct().count();
        }
        System.out.println(Arrays.stream(result).sum());
    }
}
,

我经常发现以这种方式筛选时有用的一个标准“改进”是为所有值设置最小素因子(而不仅仅是“真/假”值)。然后“是素数”的决定是检查最小素数因子 mycmd = os.popen('gphoto2 --auto-detect').read() print(mycmd) time.sleep(1) if mycmd.startswith('Nikon'): print("OK") else: print("error")` 是否小于该值。这基本上和质数筛法一样快,但提供了更直接的方法来分解范围内的数字。

在 Python 中:

lpf

这里的筛选只需要两秒钟多一点,大约是总时间的四分之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。