20 lines
607 B
D
20 lines
607 B
D
import std.stdio, std.algorithm, std.bigint, std.functional, std.range;
|
|
|
|
auto product(R)(R r) { return reduce!q{a * b}(1.BigInt, r); }
|
|
|
|
const cats1 = sequence!((a, n) => iota(n+2, 2*n+1).product / iota(1, n+1).product)(1);
|
|
|
|
BigInt cats2a(in uint n) {
|
|
alias mcats2a = memoize!cats2a;
|
|
if (n == 0) return 1.BigInt;
|
|
return n.iota.map!(i => mcats2a(i) * mcats2a(n - 1 - i)).sum;
|
|
}
|
|
|
|
const cats2 = sequence!((a, n) => n.cats2a);
|
|
|
|
const cats3 = recurrence!q{ (4*n - 2) * a[n - 1] / (n + 1) }(1.BigInt);
|
|
|
|
void main() {
|
|
foreach (cats; TypeTuple!(cats1, cats2, cats3))
|
|
cats.take(15).writeln;
|
|
}
|