我正在尝试从Project Euler解决Q10。我使用JavaScript和Sieve of Atkins算法来解决问题。当我在浏览器(Safari和FF)上运行代码时,浏览器会提示脚本没有响应。即使我让脚本继续下去,我也没有得到答案。我知道有同样的Project Euler问题的线程。
我的问题是: -
1.到目前为止,JavaScript能够为浏览器解决这些复杂的数学问题吗?
2.还有其他环境,我可以测试我的JavaScript程序吗?
谢谢大家。
答案 0 :(得分:6)
项目欧拉的目标是让你在数学上思考。 想想暴力强迫,你会被困住。 这是Eratosthenes筛选的实施
function problem10() {
var i, j, k, l = Math.floor((2000000-1)/2), a = [];
for (i = 0; i < l; i++) {
a[i] = true;
} var m = Math.sqrt(2000000);
for (i = 0; i <= m; i++) {
if (a[i]) {
j = 2 * i + 3;
k = i + j;
while (k < l) {
a[k] = false;
k += j;
}
}
} var s = 2;
for (i = 0; i < l; i++) {
if (a[i]) {
s += 2 * i + 3;
}
}
return s;
}
var d1 = new Date().getTime();
var answer = problem10();
var d2 = new Date().getTime();
console.log('Answer:' + answer + ' time:' + (d2 - d1));
您可以在chrome开发人员的控制台上运行它(Ctrl + Shift + J)。 猜猜看,它的时钟是0.1秒。
答案 1 :(得分:5)
答案 2 :(得分:3)
function problem10(){
var a = 0;
function isPrime(n){
var i = 2;
var b = true;
while(i<=Math.sqrt(n) && b){
b = n%i===0?false:true;
i++;
}
return n<2?false:b;
}
for(i=0;i<2000000;i++){
if(isPrime(i)){
a+=i;
}
}
return a;
}
答案 3 :(得分:2)
您可以尝试在node.js上测试您的实施。
但是,我敢打赌你的代码有问题。现代浏览器中的JavaScript非常快(通常你应该很快得到Project Euler的答案;它的设计并不需要大量的计算能力)。