Hatena::Groupjavascript

emergentのJavaScript入門日記

 | 

2008-10-16

Problem 1

| 23:33 | Problem 1 - emergentのJavaScript入門日記 を含むブックマーク はてなブックマーク - Problem 1 - emergentのJavaScript入門日記

JavaScriptでも解いてみる。計算ぐらいすらすら書けるようになっておきたい。

10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、 これらの合計は 23 になる。

同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。

Problem 1 - PukiWiki
var ans = 0;
var max = 1000;
for (var i=0; i<max; i++) {
    if (i%3==0 || i%5==0) {
        ans += i;
    }
}
print(ans);

実行結果

$ js p001.js
233168

Problem 2

| 23:37 | Problem 2 - emergentのJavaScript入門日記 を含むブックマーク はてなブックマーク - Problem 2 - emergentのJavaScript入門日記

フィボナッチ数列の項は前の2つの項の和である。 最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。

Problem 2 - PukiWiki
var ans = 0;
var val = 0;
var x1 = 1, x2 = 2;
while (val <= 4000000) {
    if (val%2==0) {
        ans += val;
    }
    val = x1 + x2;
    x1 = x2;
    x2 = val;
}
print(ans);

実行結果

$ js p002.js
4613730

Problem 3

| 23:59 | Problem 3 - emergentのJavaScript入門日記 を含むブックマーク はてなブックマーク - Problem 3 - emergentのJavaScript入門日記

13195 の素因数は 5、7、13、29 である。 600851475143 の素因数のうち最大のものを求めよ。

Problem 3 - PukiWiki
var target = 600851475143;
var ans = 0;
function get_primes(num) {
    if (num < 2) {
        return [];
    } else if (num == 2) {
        return [2];
    }
    
    var primes = [];
    for (var i=2; i*i <= num; i++) {
        while (num % i == 0) {
            primes.push(i);
            num /= i;
        }
    }
    primes.push(num);
    return primes;
}

try {
    ans = get_primes(target).pop();
} catch(e) {
    ans = 0;
}
print(ans);

実行結果

$ js p003.js
6857
 |