平成25年10月27

[流れ星]

     第298回数学的な応募解答

      <解答募集期間:9月29日〜1027日>

[2進法]

NO1「uchinyan  09/29 1510分受信 更新10/27

n! を素因巣分解したときの素因数 2 の指数というのは,

1 n の中に 2 の因数がいくつあるかということ,に注意すれば,要するに,

f(n) は,n 2 で割っていったときに現れる余りを足していく関数

g(n) は,n 2 で割っていったときに現れる商を足していく関数

ということです。

 

(1)

f(0) + g(0) = 0 + 0 = 0

f(1) + g(1) = 1 + 0 = 1

f(2) + g(2) = 1 + 1 = 2

f(3) + g(3) = 2 + 1 = 3

f(4) + g(4) = 1 + 3 = 4

 

(2)

f(2^n) = f(2^(n-1)) = ... = f(2) = f(1) = 1

f(2^n - 1) = f(2(2^(n-1) - 1) + 1) = f(2^(n-1) - 1) + 1 = ... = f(1) + (n-1) = n

 

(3)

g(2^n) = g(2^(n-1)) + 2^(n-1) = ...

= g(1) + (1 + 2 + ... + 2^(n-1))

= 1 + 2 + ... + 2^(n-1) = 2^n - 1

g(2^n - 1) = g(2(2^(n-1) - 1) + 1) = g(2^(n-1) - 1) + (2^(n-1) - 1) = ..

= g(1) + ((2^1 - 1) + (2^2 - 1) + ... + (2^(n-1) - 1))

= 2(1 + 2 + ... + 2^(n-2)) - (n-1) = 2(2^(n-1) - 1) - (-1) = (2^n - 1) - n

 

(4)

予想 f(n) + g(n) = n

証明

n = 0 のとき

f(0) + g(0) = 0 + 0 = 0

で成立。

n k 以下で成立するとします。

n = k+1 2 で割った商を q,余りを r,とすると,

k+1 = 2q + r

ここで,q k 以下で,r k+1 が偶数又は奇数にしたがって 0 又は 1 です。

そこで,

f(k+1) = f(q) + rg(k+1) = g(q) + q

f(k+1) + g(k+1) = (f(q) + r) + (g(q) + q) = (f(q) + g(q)) + q + r

ここで,数学的帰納法の仮定より,f(q) + g(q) = q,なので,

f(k+1) + g(k+1) = (f(q) + g(q)) + q + r = q + q + r = 2q + r = k+1

で成立。

以上より,

f(n) + g(n) = n

がいえました。

 

(考察&感想)

n を2進法で表すには,

n 2 で割っていき,出て来た余りを下1桁から上位桁に向かって順番に並べればいいです。

このときの,余りの和 = 桁の数字の和 = f(n),商の和 = g)n,となっています。

例えば,15 で確かめてみると...

2進法への変換の計算

13

= 2 * 6 + 1

= 2 * (2 * 3 + 0) + 1

= 2 * (2 * (2 * 1 + 1) + 0) + 1

= 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1

-> 1101

ところが,この式を書き換えると,

13

= 2 * 6 + 1 = 1 + 6 + 6

= 1 + 6 + (2 * 3 + 0) = (1 + 0) + (6 + 3) + 3

= (1 + 0) + (6 + 3) + (2 * 1 + 1) = (1 + 0 + 1) + (6 + 3 + 1) + 1

= (1 + 0 + 1) + (6 + 3 + 1) + (2 * 0 + 1) = (1 + 0 + 1 + 1) + (6 + 3 + 1 + 0)

= f(13) + g(13)

つまり,結局,同じ n に関する式ををどのように式変形するかということだけなので,

実は当たり前のことをもっともらしく尋ねているだけの問題でしたね。

でも,難しげな式で書かれると,何かすごいことのようにも見えてしまうから不思議 (^^;

NO2「浜田明巳」 10/03 0930分受信 更新10/27

(1)f()=0
   f()=f()+1=1
   f()=f()=1
   f()=f()+1=2
   f()=f()=1
 次に,0!=1!=1から,
  g()=g()=0
 2!=1・2,3!=1・2・3から,
  g()=g()=1
 4!=1・2・3・4から,
  g()=1+2=3
 まとめると,
  f()+g()=0+0=0
  f()+g()=1+0=1
  f()+g()=1+1=2
  f()+g()=2+1=3
  f()+g()=1+3=4

(2)f()=f(n−1)=f(n−2)=………=f()=f()=1
   f(−1)=f(n−1−1)+1=f(n−2−1)+2=………
    =f(−1)+n=f()+n=n

(3)g()=g()=0=2−1
   g()=g()=1=2−1
   g()=g()=3=2−1
   g()=g()
 8!=1・2・3・4・5・6・7・8から,
   g()=1+2+1+3=7=2−1
 故にg()=2−1と類推できる.
 これを数学的帰納法で証明する.
i).
n=0のとき,g()=0となり,成立する.
ii).
n=k(k≧0)のとき,g()=2−1と仮定する.
 つまり,
  2!=1・2・3・………・(−1)・2
を素因数分解したときの2の指数が,g()=2−1である.
 n=k+1のとき,
  2k+1!={1・2・3・………・(−1)・2}
          ・{(+1)(+2)(+3)・………・(+2−1)(+2)}
を素因数分解したときの2の指数は,
  g(){()+1}=2g()+1=2(−1)+1=2k+1−1
 故にn=k+1のときも成立する.
  ∴g()=2−1(nは0以上の整数)

 次に,g(−1)は,
  1・2・3・………・(−1)
を素因数分解したときの2の指数なので,
  g()
すなわち,
  1・2・3・………・(−1)・2
を素因数分解したときの2の指数よりも,n少ない.
  ∴g(−1)=g()−n=2−1−n

(4)(1)より,f()+g()=nと類推できる.これを数学的帰納法で証明する.
i).
0≦n≦2のとき,(1)より成立する.
ii).
0≦n≦2のとき,成立すると仮定すると,
  f()+g()=n
 2+1≦n≦2k+1のときを考える.
 1≦m≦2として,f(+m)−f()を計算する.
 (1) m=2のとき,
  f(+2)−f()=f(k+1)−f()=1−1=0
 (2) 2≦m≦2−1のとき,
  ア). m=2sのとき(s≧1),
   f(+m)−f()=f(+2s)−f(2s)=f(k−1+s)−f()
  イ). m=2s+1のとき(s≧1),
   f(+m)−f()=f(+2s+1)−f(2s+1)
    ={(k−1+s)+1}{()+1}=f(k−1+s)−f()
 いずれの場合も,
  f(+m)−f()=f(k−1+s)−f()(m>s)
となる.
 故に何回かの操作の後に,
  f(+m)−f()=f(+1)−f()(t≧1)
となる.これはm=1のときも成立する.
  ∴f(+m)−f(){(t−1)+1}−f()=1

 次に,g(+m)−g()を計算する.
 g()は,
  1・2・3・………・m
を素因数分解したときの2の指数.
 g(+m)は,
  (1・2・3・………・2){(+1)(+2)(+3)・………・(+m)
を素因数分解したときの2の指数.
  1・2・3・………・2
の2の指数は,g()
  (+1)(+2)(+3)・………・(+m−1)(+m)
の2の指数は,
  1≦m≦2−1のとき,g()
  m=2のとき,g()+1
 故に,
  1≦m≦2−1のとき,g(+m)−g()=g()
  m=2のとき,g(+2)−g()=g()+1

 まとめると,
 1≦m≦2−1のとき,
  f(+m)+g(+m){()+1}+g()+g()
   ={()+g()}+2=m+2
 m=2のとき,
  f(+2)+g(+2)=f()+2g()+1
   =1+2(−1)+1=2k+1=2+2
 故に2+1≦n≦2k+1のときも成立する.

 i).ii).から,0以上の整数nに対して,f()+g()=n

 ひどいものになってしまいました.2進法を使っていません.
 やはり,エクセルのマクロの方が簡単ですね.
 f()+g()=n(0≦n≦1000)を確かめました.

Option Explicit
Const max As Long = 1000
Sub Macro1()
     Dim n As Long, dame As Integer
     dame = 0: n = 1
     While dame = 0 And n <= max
       Cells(n, 1).Value = n
       Cells(n, 2).Value = f(n)
       Cells(n, 3).Value = g(n)
       Cells(n, 4).Value = f(n) + g(n)
       If f(n) + g(n) = n Then
         Cells(n, 5).Value = "
"
         n = n + 1
       Else
         Cells(n, 5).vallue = "
×"
         dame = 0
       End If
       Range("A" & n).Select
     Wend
     If dame = 0 Then Range("A1").Select
End Sub
Private Function f(ByVal n As Long) As Long
     If n = 0 Then
       f = 0
     ElseIf n Mod 2 = 0 Then
       f = f(n / 2)
     Else
       f = f((n - 1) / 2) + 1
     End If
End Function
Private Function g(ByVal n As Long) As Long
     Dim j As Long, jj As Long
     g = 0
     For j = 1 To n
       jj = j
       While jj Mod 2 = 0
         g = g + 1: jj = jj / 2
       Wend
     Next j
End Function

NO3「二度漬け白菜」10/17 2152分受信 更新10/27

「第298回数学的な応募問題」 の解答

 

ペンネーム:二度漬け白菜

 

(1)g(n)=max{p;(2^p)|n!}=Σ[k=1〜∞]floor(n/(2^k)) です。

 

f(0)+g(0)=0+0=0,
f(1)+g(1)=(f(0)+1)+0=0+1+0=1,
f(2)+g(2)=f(1)+floor(2/2)=1+1=2,
f(3)+g(3)=(f(1)+1)+floor(3/2)=1+1+1=3,
f(4)+g(4)=f(2)+floor(4/2)+floor(4/4)=1+2+1=4 (
)

 

(2)f(2^n)=1, f(2^n - 1)=n ()

 

n2進法で n=Σ[i=0k]a[k]*(2^i) (a[i] 0 または 1)
と表示するとき、
f(n)a[0],a[1], ,a[k]の中の 1 の個数に等しい」---(*)
ことをnに関する帰納法で証明します。

 

(証明)0以上の任意の整数nに対して、
f(n)=f(floor(n/2))+n-2*floor(n/2)
が成り立ちます。これを利用します。
(n
が偶数のとき、floor(n/2)=n/2, n-2*floor(n/2)=0.
n
が奇数のとき、floor(n/2)=(n-1)/2, n-2*floor(n/2)=1.)

n=0 および n=1 のとき(*)は正しい。
N
2として、 0nNなる任意のnについて(*)が正しいと仮定する。
floor(N/2)=
Σ[i=1k]a[k]*(2^(i-1)) であるので、
帰納法の仮定によりf(floor(N/2)) a[1],a[2], ,a[k]の中の1
個数に等しい。
また、a[0]=N-2*floor(N/2)であるので、
f(N)=f(floor(N/2))+N-2*floor(N/2)
と合わせると、n=Nのときにも(*)は正しい。(証明終)


 

(3) g(2^n)=2^n - 1, g(2^n - 1)=2^n - 1 - n ()

 

任意の非負整数nに対して、
g(2^n - 1)=b[n], g(2^n)=c[n]
とおく。
b[n+1]
=max{p;(2^p)|(2^(n+1)-1)!}
=max{p;(2^p)|(1)*(2)*(3)*
*(2^n)*(2^n + 1)*(2^n + 2)*(2^n + 3)**(2^n + 2^n -1)}
=max{p;(2^p)|(1)*(2)*(3)*
*(2^n)} + max{p; (2^p)|(2^n + 1)*(2^n + 2)*(2^n + 3)**(2^n + 2^n -1)}
=c[n]+max{p; (2^p)|(2^n + 1)*(2^n + 2)*(2^n + 3)*
*(2^n + 2^n -1)}.
ここで、1i2^n -1 のとき、max{p; (2^p)|(2^n + i)}=max{p; (2^p)|i}であるので、
max{p; (2^p)|(2^n + 1)*(2^n + 2)*(2^n + 3)*
*(2^n + 2^n -1)}
=max{p; (2^p)|(1)*(2)*(3)*
*(2^n -1)}
=b[n].
よって、b[n+1]=c[n]+b[n] ---(**) が成り立つ。
また、
c[n]=max{p;(2^p)|(1)*(2)*(3)*
*(2^n)}
=max{p;(2^p)|(1)*(2)*(3)*
*(2^n - 1)}+max{p;(2^p)|(2^n)}
=b[n]+n.
つまり、c[n]=b[n]+n ---(***) が成り立つ。
(**)
および(***)とから、c[n]=2^n - 1, b[n]=2^n - 1 - n となる。


 

(4) f(n)+g(n)=n ---(****) であると類推できる。


この類推が正しいことをnに関する帰納法で証明する。
(
証明) n=0,1,2,3,4のときには(****)は正しい。(このことは(1)で既に示した)
N
5として、0nNなる任意のnについて(****)が正しいと仮定する。
N=2^m + k (m
0以上の整数、k0k2^m - 1 を満たす整数) と表せる。
ここで、kN-1 に注意。
f(N)+g(N)
=f(2^m + k)+g(2^m + k)
=f(2^m)+f(k)+g(2^m)+g(k)
=1+f(k)+(2^m - 1)+g(k)
=f(k)+g(k)+2^m
=f(k)+g(k)+(N-k)
=k+(N-k) (
∵帰納法の仮定により、(N-1)以下のすべての非負整数kに対してf(k)+g(k)=k)
=N.
よって、n=Nでも(****)は正しい。
以上より任意の非負整数nに対して、 f(n)+g(n)=n が成り立つ。(証明終
-------------------------------------------------------------------------n=0,1,2,3,
… に対するf(n)の値を列挙してみると、
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1,
… となります。
この数列はOEISに登録されていますね。 
http://oeis.org/A000120
どうやら、f(n)の一般項は簡潔な形には書けないようですね。
次のような不等式が成立します。
f(n^2)
(1/2)*f(n)*(f(n)+1).

<水の流れ:f(n)の値が数列として登録されているとは知りませんでした。参考にします。>

 

NO4「にいばりZ1210/28 1843分受信 更新10/28

(1)              (1)

(2)              f(0)=0

f(1)= f((1-1)/2)+1=f(0)+1=0+1=1

f(2)= f(2/2) =f(1) =1

f(3)= f((3-1)/2)+1=f(1)+1=1+1=2

f(4)= f(4/2) =f(2) =1

g(0)=0

g(1)=0 1!=2^0

g(2)=1= g(1)+1 2!=2^1×2^0

g(3)=1= g(2)+0 3!=3^1×2^1

g(4)=3= g(3)+2 4!= 2^2×3^1×2^1

 

f(n)+g(n)=n ただし0n4・・・・・・・・・解答

 

(2)

   f(2^n)= f(2^(n-1))= f(2^(n-2))= f(2^(n-3))=・・・= f(2^1)= f(1)=1・・・・・・・・・解答

      f(2^n-1)=f((2^n-2-2-22-222・・・-2^(n-1))/2^n)+n

            =f((2^n-2^n)/2^n)+n=f(0)+n=n          

-2-2-22-222・・・-2^(n-1)

=-( 2+2+22+222・・・+2^(n-1))

=1+((2^(n-1+1)-1)/(2-1))=-(1+2^n-1)=-2^n

       ・・・・・・・・・解答

 

(3)

      (2^n)!=2n(2n-1) (2n-2) (2n-3) (2n-4)・・・・・・(2n-(2n-1))

   上式右辺因数(必ずしも素因数ではない)には

   2の倍数が2n/2

   22の倍数が2n/22

   23の倍数が2n/23

   24の倍数が2n/24

       ・

       ・

   2nの倍数が2n/2n

   よって(2^n)!に含まれる素因数2の個数g(2^n)

   2n-1+2n-2+2n-3+2n-4+・・・+1

   g(2^n)=( 2n-1+1-1)/(2-1)= 2n-1・・・・・・・・・回答

   g(2^n-1)(2^n-1)!に含まれる素因数2の個数なので

(2^n)!に含まれる素因数2の個数から2^nに含まれる素因数2の個数nを引けばよい

   g(2^n-1)=g(2^n)-n= 2n-1-n・・・・・・・・・回答

 

     (2)(3)より   f(2^n)+ g(2^n)= 2^n

         f(2^n-1)+ g(2^n-1)= 2^n-1

 

 

(4)

f(1)+g(1)=1 (1)より明らか

f(n)+g(n)=n を真としたとき

f(n+1)+g(n+1)=n+1

が真で有る事を証明する

準備

i : 非負整数(0,1,2,3,4,・・・・)

q=p2j1 p3j2 p4j3 p5j4 p6j5 : 奇素数の累乗の積(p2, p3, p4, p5,・・・・:3,5,7,11・・・、jk:非負整数(0,1,2,3,4,・・・・)

とすると、1以上の整数は次式で表される

n=2iq

nを偶奇に分けて証明する

n: 偶数の場合i0

f(n)=f(2iq) =f(2i-1q) =f(2i-2q)=・・・・・・= f(20q) = f(q)

f(n+1)=f(2iq+1) =f((2iq+1-1)/2) +1= f(2i-1q) +1= f(q)+1= f(n)+1

g(n+1)= g(n) n+1は奇数なので2を因数に含まない

∴ f(n+1)+ g(n+1)= f(n)+g(n)+1=n+1・・・・@

n: 奇数の場合

n+1=2iqと置く

f(n) = f(2iq-1)= f((2iq -1-1)/2)+1= f(2i-1q -1)+1=・・・・= f(q -1)+i= f((q -1)/2)+i

f(n+1)= f(2iq)= f(q)= f((q -1)/2)+1= f(n)+1-i

g(n+1)= g(2iq)= g(2iq-1)+i= g(n)+i   2iq!= (2iq-1)! ×2iq

∴ f(n+1)+ g(n+1)= f(1) +1-i + g(n)+i = f(n)+g(n)+1=n+1・・・・A

@      Aからnが偶奇とも

f(n)+g(n)=n

が成立する事が示され

(1)             よりf(0)+g(0)=0が示されているので

非負整数において

f(n)+g(n)=n

が成立する

 

感想

4)にすべてが収斂されますが、とても面白く広がりのある問題ですね。

関数f(n)とg(n)がこのように補完し合うとは考えもよりませんでした。

この手の方法を使うと数論の問題でいろいろな結果が導けそうです。

 

皆さん、問題や質問に答えてください。一部でも構いませんから、解答とペンネームを添えて、メールで送ってください。待っています。