Project Euler 1(1)

そろそろC++の復習でもしようというのとVC10(C++0x)の機能の予習を兼ねてProject Eulerの問題を解いていく。


http://projecteuler.net/index.php?section=problems&id=1

何も考えずに書くとこんな感じだろうか。

#include <iostream>

using namespace std;

const int   N = 1000;

int main() {
    int s = 0;
    for(int n = 1; n < N; n++) {
        if(n % 3 == 0 || n % 5 == 0) {
            s += n;
        }
    }
    cout << s << endl;
}

しかし、Pythonなら、

N = 1000
print sum(filter(lambda n: n % 3 == 0 or n % 5 == 0, xrange(1, N)))

Haskellなら

n = 1000
main = print (sum [ k | k <- [1..n-1], mod k 3 == 0 || mod k 5 == 0 ])

Haskellのように、とは言わないが、C++でもPythonのように書けないだろうか。