アプリ版:「スタンプのみでお礼する」機能のリリースについて

0以上の整数nについて、
nが偶数のときf(n)=f(n/2)
nが奇数のときf(n)=f{(n-1)/2}+1
このときf(n)はnを2進法で表したときの1の個数になると思うのですが、証明する方法がわかりません。
帰納法などで証明できないでしょうか

A 回答 (6件)

実際に具体的な値について計算すればよくわかると思いますよ。


やっていることは、
偶数のときは最下位の桁が0ですから、何もせずに2で割ります。
n=6なら110→11
奇数のときは最下位の桁が1ですから、1引いて2で割ります。
n=3なら11→1
このときにfに1足します。f(n)=f{(n-1)/2} +1←この部分

帰納法での証明ですが、経験者ではないですが参考までに・・・。
桁数がmのときにf(n)がnを2進法で表したときの1の個数を表すと仮定して、残りの上位m-1桁の1の個数がf(n/2)もしくはf{(n-1)/2}で表わせることを示せばよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2007/10/22 21:01

二進数では、整数のとき


偶数 → 10010 (一番右のけたが0)
奇数 → 10011 (一番右のけたが1)
となる。また、二進数を2で割るとは、
10010 → 1001
のように、右に一桁シフトすること。
よって、
1)偶数のとき
 nを二進数に直したときの1の個数をmとおくと、
  (1がm個)0
 となるので、2で割ると
  (1がm個)
 となる。よって、f(n) = f(n/2)である。
2)奇数のとき
 nを二進数に直したときの1の個数をmとおくと
  (1がm個)1
 となるので、n-1は
  (1がm個)0
 となる。よってこれを2で割ると
  (1がm個)
 これに1を加える。n=1000101のように、2桁目が0のときはf(n)=100011と なるので一致するが、n=1001111のようになっているとf(n)=101000と なって必ずしも一致しない。f{(n-1)*2}+1とかではないんでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2007/10/22 21:00

回答してから気付きましたが、n=A_m*2^(m-1)+A_(m-1)*2^(m-2)+...(A_i=0,1)と表わせることを利用するのかも。

    • good
    • 0

>このときf(n)はnを2進法で表したときの1の個数になると思うのですが、



どこからこの結論が出てきたのかはわかりませんが、正しいです。

>nが偶数のときf(n)=f(n/2)

これは、n=2*m(mは0以上の整数)と考えます。
例えば、m=5であれば、mの2進数表記は101であり、2*mの2進数表記は1010です。
2進数表記でmを2倍するということは、最下位桁に0を追加して元の数を1桁繰り上げるということです。
ですから2倍しても1の個数が変化することはありません。

>nが偶数のときf(n)=f(n/2)

これも、m(mは0以上の整数)を使ってnを書き換えてやれば証明可能なはずです。
tomochan1017さんご自身でトライしてみてください。
    • good
    • 0
この回答へのお礼

奇数の場合もうまく証明できました。
ありがとうございます。

お礼日時:2007/10/22 21:00

一応、f(1)=1 が必要ですが...


で、
条件から、f(2^k)の場合について、f(2^k)=1 がいえるので、
n=2^k の場合は易しいですね。

n=2^k(1)+2^k(2)+.....+2^k(i) のときf(n)=iを証明すればよいので、

n=2^k(1)のとき、f(n)=1 (これは最初に言った)

n=2^k(1)+2^k(2)+.....+2^k(i) のときf(n)=i が成立すれば、
n=2^k(1)+2^k(2)+.....+2^k(i)+2^k(i+1) のときf(n)=i+1 
が成立することを示してみれば?
(添え字の数についての帰納法です)

やってみたわけではないので、アイデアのみ。
このとき、k(i)>k(i+1)≧0を仮定しておくと良いでしょう。
2^k(i)についてくくると、末尾に1が現れますので、それを使ってください。
    • good
    • 0

No.5です。

補足です。
0以上の整数nとのことですので、f(1)=1 はいりませんね。
でも、f(0)=0 がいります。
    • good
    • 1
この回答へのお礼

ありがとうございました。
いろいろな考え方がありますね。

お礼日時:2007/10/22 20:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!