図書館で借りてほったらかしにしてあった(他の本を読んでいた)「数学ガール」を今日読み出した。
- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2007/06/27
- メディア: 単行本
- 購入: 58人 クリック: 1,055回
- この商品を含むブログ (967件) を見る
ざーっと読んで、カタラン数の章。この問題、カタラン数であることに気がつくのに時間がかかった。10分くらいかかったかも。答えあわせとして、主人公の思考過程を読んでいて、漸化式が出てきたところで、なぜかタイトルの問題を思いついた。
べき和とは、
Sn(m) = 1n + ... + mn
である。これを、
cout << S<3>(4) << endl;
こんな具合に求めたい。
より、
また、
とおけば、
これで、コード化できる。
#includeusing namespace std;
template
struct C {
enum { value = C::value * (n - m + 1) / m };
};template
struct C{
enum { value = 1 };
};template
int Pow(int m) {
return Pow(m) * m;
}template<>
int Pow<0>(int m) {
return 1;
}template
struct cPowSum {
int operator()(int m) {
return cPowSum()(m) - S (m) * C ::value;
}
};template
struct cPowSum{
int operator()(int m) {
return Pow(m + 1) - 1;
}
};template
int S(int m) {
return cPowSum()(m) / (n + 1);
};int main() {
cout << S<0>(1) << endl; // 1
cout << S<3>(4) << endl; // 100
cout << S<8>(10) << endl; // 167731333
}