- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我学会了一种叫做“线性筛”的算法https://cp-algorithms.com/algebra/prime-sieve-linear.html能够在线性时间内得到所有小于 N
的素数。
这个算法有一个副产品,因为它有一个数组 lp[x]
,它存储数字 x
的最小质因数。
所以我们可以按照lp[x]
找到第一个质因数,继续除法得到所有因数。
同时,文章中也提到,借助一个额外的数组,我们可以不除法得到所有因子,如何实现?
文章说:“......此外,仅使用一个额外的数组将使我们在寻找因式分解时避免除法。”
最佳答案
该算法归功于 Pritchard。它是 Paul Pritchard: "Linear Prime-Number Sieves: a Famiy Tree", Science of Computer Programming, vol. 9 (1987), pp.17-35 中算法 3.3 的变体。 .下面是删除了不必要测试的代码,以及一个用于存储因子的额外向量:
for (int i=2; i <= N; ++i) {
if (lp[i] == 0) {
lp[i] = i;
pr.push_back(i);
}
for (int j=0; i*pr[j] <= N; ++j) {
lp[i*pr[j]] = pr[j];
factor[i*pr[j]] = i;
if (pr[j] == lp[i]) break;
}
}
然后,为了得到一个数x
的所有质因数,得到第一个质因数作为lp[x]
,然后递归得到factor[x]
的质因数,在lp[x] == x<之后停止
。例如,x=20
、lp[x]=2
和 factor[x]=10
;然后 lp[10]=2
和 factor[10]=5
;然后 lp[5]=5
我们就停止了。所以质因数分解是 20 = 2*2*5
。
关于prime-factoring - 如何在没有除法的线性筛算法中寻找一个整数的因式分解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70114835/
我正在尝试编写一个函数,使用 "Sieve of Sundaram" algorithm 从 1..n 计算所有奇数素数. 这是我的尝试: sSund :: Integer -> [Integer]
我是 Haskell 的新手,对于我正在实现的事情,我需要一个素数列表。我试着写一个,但它太慢了。 这是我尝试过的。 primeList = primes 1000 primes :: Int ->
我是一名优秀的程序员,十分优秀!