2.2.28
簡単に書くために[x]:=xmod2と定義する。
パスカルの三角形と二項係数の関係から、
g(n)=[(0n)]+[(1n)]+⋯+[(nn)]である。
これを簡単な式で表せるようにするのが目的である。
パスカルの三角形を偶数を0、奇数を1で表すと以下のようになる。
1
1 1
1 0 1
1 1 1 1
1 0 0 0 1
1 1 0 0 1 1
1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 1 1
1 0 1 0 0 0 0 0 1 0 1
1 1 1 1 0 0 0 0 1 1 1 1
1 0 0 0 1 0 0 0 1 0 0 0 1
1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
よってg(n)は
| n |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
| g(n) |
2 |
2 |
4 |
2 |
4 |
4 |
8 |
2 |
4 |
4 |
8 |
4 |
8 |
8 |
16 |
となる。g(n)が2の累乗の形になっているのでnを2進法で表し、またg(n)を2を底とする対数と比較してみると次のようになる。
| n |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
| lg(g(n)) |
1 |
1 |
2 |
1 |
2 |
2 |
3 |
1 |
2 |
2 |
3 |
2 |
3 |
3 |
4 |
これからg(n)=2"nの立っているビットの数"と予想できる。
これをnに関する帰納法で示す。
証明しやすいようにg(n)を漸化式の形で書き換えると、
g(0)g(2n)g(2n+1)===1g(n),(n>0)2g(n),(n≥0)
となりこれを示せば良い。ただし便宜上g(0)=1とした。
(k2n)が扱いづらいので、まず以下の補題を示す。
(k2n)=i+j=k0≤i,j∑(in)(jn)
二項定理より(k2n)は(x+1)2nのxkの係数である。
一方(x+1)2n=(x+1)n(x+1)n=(i=0∑n(in)xi)(j=0∑n(jn)xj)
であるからxkの係数はi+j=k0≤i,j≤n∑(in)(jn)である。
n<iのとき(in)=0なのでi,j≤nの制約をなくしてもよいのでこれは
i+j=k0≤i,j∑(in)(jn)である。
これらのxkの係数が一致するので補題が成り立つ。
まず漸化式g(2n)=g(n)が成り立つことを示す。
補題を使えば、
[(k2n)]=[(0n)(kn)+(1n)(k−1n)+⋯+(kn)(0n)]
なのでkが奇数のときk=2l+1として
[(k2n)]=[2(0n)(kn)+2(1n)(k−1n)+⋯+2(ln)(l+1n)]=0
と打ち消すようにして0となる。
一方kが偶数のときはk=2lとして
[(k2n)]==[2(0n)(kn)+2(1n)(k−1n)+⋯+2(l−1n)(l+1n)+(ln)(ln)][(ln)(ln)]=[(ln)]
となる。
結局g(2n)は偶数の部分しか残らないので
g(2n)===[(02n)]+[(12n)]+⋯+[(2n2n)][(0n)]+[(1n)]+⋯+[(nn)]g(n)
となり漸化式が成り立つ。
次にg(2n+1)=2g(n)を示す。
(kn)=(k−1n−1)+(kn−1)を使えば
g(2n+1)=[(02n)]+[(02n)+(12n)]+⋯+[(2n−12n)+(2n2n)]+[(2n2n)]
となる。
[(i2n)]はiが奇数のとき0であったから
[(i2n)],[(i+12n)]のどちらかは0になる。従って
[(i2n)+(i+12n)]=[(i2n)]+[(i+12n)]
とかける。故に
g(2n+1)==2([(02n)]+[(12n)]+⋯+[(2n2n)])2g(2n)=2g(n)
が成り立つ。