我编写了一个生成素数的程序。它运作良好,但我想加快速度,因为生成所有素数直到10000
需要很长时间document.getElementById('category').onclick = function() {
toggleSub_by_class(this, 'category');
};
function toggleSub_by_class(box, select_class) {
// get reference to related content to display/hide
var el = document.getElementsByClassName(select_class);
var flag;
if (box.checked) {
for (var i = 0, j = el.length; i < j; i++) {
el[i].style.display = 'table-row-group';
}
} else {
for (var i = 0, j = el.length; i < j; i++) {
var classList = el[i].className.split(' ')
flag = 0
for (var h = 0, k = classList.length; h < k; h++) {
if (document.getElementById(classList[h])) {
if (document.getElementById(classList[h]).checked) {
flag = 1
}
}
}
if (flag == 0) {
el[i].style.display = 'none';
}
}
}
}
答案 0 :(得分:2)
两项简单的改进,可以快速达到100,000甚至1,000,000。
从5开始循环,每次增加2。这并不会加速它,因为你在第一次尝试时找到了反例,但它仍然是一个非常典型的改进。
平方根是因子空间的一半,即小于平方根的任何因子与平方根之上的因子配对,因此您只需检查它的上方或下方。平方根以下的数字要少得多,因此您应该只检查小于或等于平方根的值。
以10,000为例。平方根为100.为此,您只需要查看小于平方根的值,就素数而言大约是25个值,而不是1000个小于10,000的所有素数的检查。
尝试另一种方法,例如sieve。这些方法速度更快,但内存开销更高。
答案 1 :(得分:2)
除了Nick已经解释过的内容之外,您还可以轻松利用以下属性:所有大于3的素数都与1或-1 mod 6 一致。
由于您已在初始列表中添加了2和3,因此您可以从Create Procedure [dbo].[GetEmployees]
as
....
开始,测试count = 6
和count - 1
,每次增加6。
以下是我在Swift的第一次尝试,请原谅可能远非最佳的语法。
count + 1
我在iswift.org/playground上测试了上述代码,限制为10,000,10000和1,000,000。