Javascript 网络工作者素数计算
我正在尝试创建一个HTML 5 Web Worker,它将计算给定值从1开始的素数:我的JavaScript代码是:Javascript 网络工作者素数计算,javascript,web-worker,Javascript,Web Worker,我正在尝试创建一个HTML 5 Web Worker,它将计算给定值从1开始的素数:我的JavaScript代码是: var found = 0; var n = 1; var total = 0; var THRESHOLD = 10; while (total < THRESHOLD) { n += 1; for (var i = 2; i <= Math.sqrt(n); i++) { if (!(n % i == 0)) { total++;
var found = 0;
var n = 1;
var total = 0;
var THRESHOLD = 10;
while (total < THRESHOLD) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i++) {
if (!(n % i == 0)) {
total++;
postMessage(found);
}
else {
found++;
}
}
}
此代码基于:
但是,Web Worker脚本返回值8,这对于输入数字10显然是不正确的。我在这里哪里出错了?你的逻辑是错误的,只有当素数直到最后都不可除时,你才能确定它。如果它可以被整除,它就不是素数。我已经更新了下面的代码
var found = 0;
var n = 1;
var total = 0;
var THRESHOLD = 10;
while (total < THRESHOLD) {
n += 1;
found = 0 ;
for (var i = 2; i <= Math.sqrt(n); i++) {
if ((n % i == 0)) {
found = 1;
break;
}
}
if(found == 0)
total++;
postMessage(found);
}
尝试将质数确定移到外部:
var n = 0
,total = 0;
,THRESHOLD = 10;
while (++n < THRESHOLD) {
total += isPrime(n) ? 1 : 0;
}
postMessage(total); //=> 4
function isPrime(number) {
var start = 2;
while (start <= Math.sqrt(number)) {
if (number % start++ < 1) return false;
}
return number > 1;
}
有关iPrime函数,请参见
下面是此代码的一个示例我测试了代码。但是,不管我提供了什么阈值,主页上的worker.onmessage事件处理程序总是接收值0。测试代码。对于阈值10,它返回29,这是不正确的。另外,我要的是素数的个数,而不是它们的和。例如,脚本应该将阈值10.Ok的值5 1、2、3、5、7作为postMessage。请参见编辑后的答案。顺便说一句:1不是质数,请参阅。所以阈值为10的postMessage应该返回4;