http://projecteuler.net/index.php?section=problems&id=39
p = 2lm(m + n)
だから、l, m, nを変えてpを配列でカウントする。
#include <iostream> #include "itertools.h" using namespace std; using namespace itertools; int main() { const int N = 1000; vector<int> v(N + 1, 0); for(int m = 2; 2 * m * (m + 1) <= N; m++) { for(int n = m % 2 == 1 ? 2 : 1; n < m; n += 2) { int q = 2 * m * (m + n); for(int l = 1; l * q <= N; l++) v[l*q]++; } } cout << fst(reduce1([] (tuple<int,int> x, tuple<int,int> y) { return snd(x) >= snd(y) ? x : y; }, zip(range<>(N + 1), iterable(v)))) << endl; }