1

二項係数Part1 〜素数pで割れる回数〜

780
0

はじめに

これから、何回かに分けて、二項係数の整数論的性質について、見ていきたいと思います。受験生の時に、二項係数関連の問題(東大2015のあれとか)にハマって、あれこれ考えてみたものですので、受験生にも役に立つ話かもしれません。

テーマ

今回は、二項係数を素数pで割れる回数について調べます。いちいち「二項係数を素数pで割れる回数」というのは面倒なので、一般に、npで割れる回数をordp(n)と書くことにします。

pが素数のとき、ordp((mn))の求め方は?

連続n整数に属するpの倍数の個数

以下、(x)n=x(x1)(x(n1))とします。
ordp((mn))=ordp((m)n(n)n)=ordp((m)n)ordp((n)n)
ですから、連続n整数に注目するのは自然な発想です。次の問題を考えましょう。

x(n1),,x1,xにはpの倍数はいくつあるか?

これは明らかにxpxnpなわけですが、もう少し踏み込んでおきます。
Rp(n)npで割ったあまりを表します。n>pの場合を考えましょう。後ろからRp(n)個を除いて、x(kp1),,xとします。kpn以下の最大のpの倍数です。さて、この個数はkpなので、その中のpの倍数の個数はxによらずk個です。いま、除いたRp(n)x(n1),,xkpの中のpの倍数の個数は、pの倍数分ずらしたRp(x)Rp(n)+1,,Rp(x)の中のpの倍数の個数と同じで、

  • Rp(x)Rp(n)+11のとき0
  • Rp(x)Rp(n)+1<1のとき1

となります。k=npであることと合わせて、問題の個数をfn,p(x)とすると、次のようにまとめられます。
fn,p(x)={np (Rp(x)Rp(n))np+1 (Rp(x)<Rp(n))
npのときも、同じ式が成り立つことが確かめられます(ここでは割愛)。これは二項係数のordpを考えるのにとても有用な判定法です。また、この判定法はpが素数である必要はありません。

ordp((mn))を求める

上で求めた判定法を用いて、
ordp((mn))=ordp((m)n)ordp((n)n)
を求めます。ちょっと一般化して、ordp((x)n)ordp((y)n)を求めましょう。
ordp((x)n)=k=1fn,pk(x)
より、
ordp((x)n)ordp((y)n)=k=1fn,pk(x)k=1fn,pk(y)=k=1(fn,pk(x)fn,pk(y))
です。fn,pk(x)fn,pk(y)は判定法により、次のように場合ごとに求められます。

  • Rpk(x)Rpk(n)かつRpk(y)Rpk(n)のとき0
  • Rpk(x)Rpk(n)かつRpk(y)<Rpk(n)のとき1
  • Rpk(x)<Rpk(n)かつRpk(y)Rpk(n)のとき1
  • Rpk(x)<Rpk(n)かつRpk(y)<Rpk(n)のとき0

ここで、暗算しやすくするため(?)に、言い換えをしましょう。今、xyはゲームをしていて、第kラウンドでは、Rpk(x)<Rpk(n)ならばx1点を得て、yも同様とします。双方の得点差が一定になるまで行い、その時点でxyに何点リードしているか、がordp((x)n)ordp((y)n)というわけです。
いま、ordp((m)n)ordp((n)n)を求めたかったのですから、mnの勝負になります。しかし、任意のkに対して、Rpk(n)Rpk(n)ですから、nはすべてのラウンドで無得点です。したがって、mの得点がそのままordp((mn))になります。

Rpk(m)Rpk(n)k=1,2,で比べたとき、Rpk(m)<Rpk(n)となる回数がordp((mn))である。

練習問題

実際に使ってみましょう。

(1) pを素数とするとき、(p2p)pで何回割れるか。
[解答] 第1ラウンドはRp(p2)=0Rp(p)より無得点。第2ラウンドはRp2(p2)=0<p=Rp2(p)より得点。以降Rpk(p2)=p2p=Rpk(p)より常に無得点だから、求める値は1である。

(2) (2015m)が偶数になる最小のm1を求めよ。(東大2015)
[解答] (2015m)が偶数とは、21回以上割り切れるということ。つまり、R2k(2015)<R2k(m)となる回数が1回以上ということである。
R2(2015)=1,R22(2015)=3,R23(2015)=7,R24(2015)=15,R25(2015)=31,R26(2015)=31
このように、R2k(2015)k5までは最大なので2015は無得点。得点できる可能性があるのは第6ラウンドからで、それはR26(m)>31のときであり、そのようなmの最小値は32である。

裏技

ordp((mn))を求める方法を得ることができましたが、これはさらに次のように言い換えることができます。

m,np進数表示して、mnを計算するとき、繰り下がりの回数はordp((mn))に等しい。

m,np進数表示のpkの位をMk,Nkとする。mnの計算において、plの位で繰り下がりが発生することと、
k=0lMkpk<k=0lNkpk
は同値であり、これはRpl+1(m)<Rpl+1(n)ということに他ならない。したがって、前節で求めたものと一致する。

おわりに

今回は二項係数のordpを求めました。Part2では、二項係数のmodpを求めます。
読んでいただきありがとうございました。

投稿日:20201125
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. はじめに
  2. テーマ
  3. 連続n整数に属するpの倍数の個数
  4. ordp((mn))を求める
  5. 練習問題
  6. 裏技
  7. おわりに