Project Euler问题的JavaScript

时间:2011-07-22 12:04:06

标签: javascript

我正在尝试从Project Euler解决Q10。我使用JavaScript和Sieve of Atkins算法来解决问题。当我在浏览器(Safari和FF)上运行代码时,浏览器会提示脚本没有响应。即使我让脚本继续下去,我也没有得到答案。我知道有同样的Project Euler问题的线程。

我的问题是: -

1.到目前为止,JavaScript能够为浏览器解决这些复杂的数学问题吗?

2.还有其他环境,我可以测试我的JavaScript程序吗?

谢谢大家。

4 个答案:

答案 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)

  1. 我认为其功能与其他任何其他功能一样 - 近年来,由于网络使用量的增加,JavaScript实现已经进行了大量优化。

  2. 您可以使用node.jsCScript(Windows脚本主机的命令行版本 - 这是Windows的一部分提供)。

  3. 如果我记得我的问题(在Python中)的实现比我想象的要慢得多。可能性很慢是由于你的算法而不是语言。

答案 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的答案;它的设计并不需要大量的计算能力)。