http://projecteuler.net/index.php?section=problems&id=27
単純に必要な分素数判定する。素数判定をするのに素数で割っていく。その素数を出すためのクラスを作った。少しずつエラトステネスのふるいをしていく。
#include <iostream> #include "primes.h" using namespace std; using namespace itertools; int prime_length(int a, int b) { return length(takewhile([&] (int n) { return primes::is_prime(n * (n + a) + b); }, itertools::count<>())); } tuple<int,int> longer(tuple<int,int> x, tuple<int,int> y) { return snd(x) >= snd(y) ? x : y; } int main() { const int N = 1000; cout << fst(reduce1(longer, map([] (tuple<int,int> x) { return make_tuple(fst(x) * snd(x), prime_length(fst(x), snd(x))); }, product(range<>(-N + 1, N))))) << endl;