• ベストアンサー

nCrが整数になることを証明したいのですが・・・。

nCrが常に整数になることを証明したいのですが、 私は帰納法を使って証明しようとして途中で行き詰ってしまいました。 これを証明できる人はいませんか? もちろん帰納法以外でも大歓迎です。 ただし、組み合わせの数だから整数になるは当たり前というのはなしでお願いします。

  • vigo24
  • お礼率87% (859/977)

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

別解。単純に n! が r!(n-r)! で割りきれることを示す。 補題 素数 p に対して n! を割り切る最大の p の羃指数は Σ_{i=1~∞}[n/p^i] ここで [x] は x を越えない最大の整数 これを使用すれば任意の素数 p に対して n! を割り切る p 羃指数は Σ[n/p^i] 、 r! を割り切る p 羃指数は Σ[r/p^i]、 (n-r)! を割り切る p 羃指数は Σ[(n-r)/p^i]。 容易にわかるように [n/p^i] ≧ [r/p^i] + [(n-r)/p^i] のため、n! を素因数分解したときに、その p 羃の因数は r!(n-r)! の p 羃因数で割り切れる。 補題の証明は宿題ね。

vigo24
質問者

お礼

御回答どうもありがとうございます。 難しいです・・・。 力不足で補題の証明もできそうにないです・・・。 整数論の本か何かを調べれば分かるんでしょうか・・・。

その他の回答 (4)

  • adinat
  • ベストアンサー率64% (269/414)
回答No.5

証明にはいろんな方法があっていいと思うんですが、汎用性っていうのが僕は大事だと思っています。そういう意味では、ANo.2さんやANo.3さんの方法が優れているという気がしてきました。 ちなみに整数論の本を見るまでもなく、n!が素数pで最大何回割れるか、というのは、1~nの中にpの倍数は何個あるのか?p^2の倍数は何個あるのか?p^3の倍数は何個あるのか?ということを考えていくと分かりますよ~^^ヒント書いちゃいましたがいいですよね?>ANo.3様 で、どのあたりが汎用性があるかと思ったかというと、二項係数nCr(この記号を使うのは日本ぐらいで、普通はnとrを縦に並べて( )でくくります。以下では(n;r)と表記することにします)とは、n人のグループをr人とn-r人の二つのグループに分割する組み合わせの総数を表しています。そこでこれを拡張して、n人をr_1人、r_2人、…、r_k人のグループに分割する場合の数を考えます。ただしn=r_1+r_2+…+r_kです。この数を多項係数(n;r_1,r_2,…,r_k)と呼んでいます。通常はnの下にr_1,r_2,…,r_kを並べて( )でくくって表記します。n=2のときが二項係数です。この場合はr_2=n-r_1ですので、書かないのが慣例です。この多項係数、たとえば(a_1+a_2+a_3+…+a_k)^nの展開式に現れる係数を求めるのに使われたりします。 で、(n;r_1,r_2,…,r_k)=n!/(r_1!r_2!…r_k!)なのですが、これは当然ながら自然数です。どうやって証明するかということになるわけですが、ここでANo.2さんやANo.3さんの方法が活躍するわけです。たとえばANo.2さんの方法を使えば、n!をn×(n-1)×…×1として、前から順番にr_1個、r_2個、…と分けて考えると、それがそれぞれr_1!の倍数、r_2!の倍数、…となるわけですね。ANo.3さんの方法はまったくそのまま通用します。ぜひ証明してみてください。それでは。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.4

>力不足で補題の証明もできそうにないです・・・。 証明見たら「何だ、簡単じゃねーか」と思うこと請け合いですが、初等整数論の参考書をいくつか漁れば載ってると思います。 #証明は直接示すのが最も好き。

vigo24
質問者

お礼

お返事どうもありがとうございます。 私も1冊だけ「初等整数論」(遠山啓)という整数論の本を持っていまして、まだ手付かずなのですが、パラパラとめくってみましたら それらしい項目が載っていました。 >証明見たら「何だ、簡単じゃねーか」と思うこと請け合いですが さすがにこうゆう訳にはいきませんでしたが、 勉強してみたいなという気持ちになりました。 >#証明は直接示すのが最も好き。 素数やガウス記号をつかう証明は今までみたことがなく、 こうゆうのをマスターできればまた別の世界が開けそうな予感がして楽しみです。 頑張ってみます。

  • zk43
  • ベストアンサー率53% (253/470)
回答No.2

nCr=n(n-1)(n-2)…(n-r+1)/r! (r=0,1,2,…,n) から出発します。 要点はn(n-1)(n-2)…(n-r+1)がr!で割り切れることですね。 一般的な話として、連続するr個の自然数の積はr!で割り切れます。 以下ではこれを証明します。 1個の場合は自明です。 連続するk個の自然数の積はk!で割り切れると仮定します。 nを任意の自然数として、 f(n)=n(n+1)(n+2)…(n+k) という関数を考えます。(任意の、連続するk+1個の自然数の積) f(i+1)-f(i) =(i+1)(i+2)…(i+k)(i+k+1)-i(i+1)(i+2)…(i+k) =(i+1)(i+2)…(i+k)(i+k+1-i) =(i+1)(i+2)…(i+k)(k+1) ここに、(i+1)(i+2)…(i+k)は連続するk個の自然数の積なので仮定 によりk!で割り切れる。 よって、 f(i+1)-f(i)=(k!の倍数)×(k+1)=(k+1)!の倍数 これを、i=1,2,…,n-1として足してやると、 f(n)-f(1)=(k+1)!の倍数の和=(k+1)!の倍数 f(1)=(k+1)!なので、f(n)=(k+1)!の倍数となって、f(n)は(k+1)! で割り切れる。 以上、数学的帰納法により、どんな自然数rに対しても、連続する r個の自然数の積はr!で割り切れる。 nCrの分子のn(n-1)(n-2)…(n-r+1)は連続するr個の自然数の積なので、 r!で割り切れる。すなわち、nCrは自然数である。

vigo24
質問者

お礼

御回答ありがとうございます。 とても分かりやすいです。 >f(i+1)-f(i) なるほど~、差を考えるんですか・・・。 全然思い付かなかったです・・・。 どうもありがとうございます。 助かりました!

  • adinat
  • ベストアンサー率64% (269/414)
回答No.1

帰納法で示すなら、パスカルの三角形を利用するのが一番自然で簡明だと思います。 (*) nCr + nC{r+1} = {n+1}C{r+1} という有名な関係式(パスカルの三角形の原理)は、簡単に階乗の定義から証明できます。ただし0≦r≦n-1とします。 以下、命題Pn:「nCrは0≦r≦nについて整数である」を帰納法で示します。 (i) P1は自明。 (ii) Pkの成立を仮定すると、パスカルの三角形の原理(*)より、{k+1}C{r+1}は0≦r≦k-1に関して整数になる。また{k+1}C0={k+1}C{k+1}=1より、これも整数。したがって、P{k+1}の成立がわかる。 以上です。まあ、パスカルの三角形を描いてみて、帰納的に明らか、っていう感じですね、気分は。

vigo24
質問者

お礼

御回答どうもありがとうございます。 >nCr + nC{r+1} = {n+1}C{r+1} この公式を使うんですか・・・。 そういえば習ったような記憶があります。 もう一度確率の分野の参考書を見直して、復習してみます。 どうもありがとうございました。

関連するQ&A

  • nCrはどうあらわせばい??

    キーボードから二つの正の整数n,r を入力し,組み合わせの数nCr を計算して画面表示するプログラムを作成せよ.ただし,組み合わせの数を計算する関数のプロトタイプをint combination( int, int )とし,my_scanf()をキーボードから二つの正の整数n,r を入力する関数,kaijo() を階乗を求めるプログラムとする. という問題なんですが #include <stdio.h> int my_scanf(void){ int n; do{ scanf("%d",&n); }while(n <= 0); return n; } int kaijo(int m){ int i,x = m; for(i=1;i<m;i++){ x *= i; } return x; } int combination( int m, int w){ int ncr; ncr = m/w; return ncr; } int main (void){ int pos,sum_n,sum_r,answer; printf("n = "); pos = my_scanf(); sum_n = kaijo(pos); printf("r = "); pos = my_scanf(); sum_r = kaijo(pos); answer = combination(sum_n,sum_r); printf("nCr = %d",answer); return(0); } 結果的にはn!/r!を求めるプログラムに・・・・。 combination関数内を書き直せばいいのでしょうか?

  • 数学的帰納法~整数であることの証明

    数学的帰納法の初歩(?)の質問です。 問。nは自然数とする。2数x,yの和、積がともに整数のとき、x^n+y^n整数であることを、数学的帰納法によって証明せよ。 という問題なのですが、解説に i)n=1,n=2のときに成り立つことを示す ii)n=k,n=k-1であると仮定して、n=k+1のときにも成り立つことを示す とありました。 また、注がついており、 『x^(k+1)+y^(k+1)=(x^k+y^k)(x+y)-xy{x^(k-1)+y^(k-1)}である』とありました。 なぜ『』だからi)でn=2を、ii)でn=k-1を書かないといけないのですか? お願いします。

  • P(0), P(1),P(2),・・・, P(n)が整数ならば、全ての整数kに対してP(k)は整数

    『nを自然数, P(x)をn次の多項式とする。P(0), P(1),P(2),・・・, P(n)が整数ならば、全ての整数kに対してP(k)は整数であることを証明せよ。』 数学的帰納法で解けるらしいのですが、分かりません。どなたか教えてください。

  • 整数の証明問題

    1,3+5,7+9+11,13+15+17+19,21+…って全て自然数の3乗の数になってますよね?この証明法を教えてくださいませんか?自分でやってみましたが、できそうでできません。整数問題って僕が解こうとすると、どれもそうなんですよね…。どなたかお願いします。

  • nCr と (kn)C(kr)

    組合せの問題です。 n,r,k ∈ 自然数、r≦nのとき、 nCr = a とおくとき、 (kn)C(kr)を、aとkであらわせないでしょうか。

  • 例えば、1から8までの整数を一つずつ使った……

    この問題を考えて欲しいです!! 例えば、1から8までの整数を一つずつ使った数列があるとする どんな並び方でも、左から数えて左端の数の分だけ順番を逆にする操作を有限回行うと、必ず左端は1になる たとえば 56712348なら 21765348 12765348 41387652なら 83147652 25674138 52674138 47628138 26748138 62748138 18472638 という風に、必ず左端が1になって、操作は終了する このことは、1からn(nは2以上のしぜんすう)の場合にも同じことがいえ、必ず左端が1になる これを証明しろ という問題です! いろいろ考えてみたのですが、全然わからないです…… たとえば、1がk番目にある時、 k以上の数が必ず、k番目より前に存在することは、鳩ノ巣原理によって示ます また数学的帰納法とかをつかってアプローチしてみましたが、イマイチ上手く行きません! わかる方、ご教授お願いします!!

  • 整数

    ユークリッドの互除法とa=bq+rを使って次の証明をお願いします。 「a,bは整数とする。(a,b)=1のときax+by=1を満たす整数x,yが存在することを示せ」 (a,b)=1というのは互いに素つまり1以外に公約数を持たないということです。 非常に困っています よろしくお願いします。

  • 異なるn個の整数からr個の整数を取り出す組み合わせ

    異なるn個の整数からr個の整数を取り出す組み合わせの数 nCrを求める関数 int combination(int n, int r){ /* ・・・ */} を作成せよ。なおnCrは以下のように定義される。 nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n ) (新版 明解C言語 入門編(柴田望洋 著) P.197 演習8-6) というので答えが int combination(int n, int r) { if((n>r) && (r>0)){ return combination(n-1,r-1) + combination(n-1,r); } else if(n==r || r==0){ return 1; } } ・という風になると教えてもらったのですがなぜこうなるのかが分かりません。 ・else if(n==r || r==0){ というのは削っても正常に動きますが、必要な物なのでしょうか? ・またifを使うときは if→eise if →else の順に使って 2つの時は if→else と使っていたのですが 上のものはif→else ifと書いています。 加えてelse(n==r || r==0){ と書いたらコンパイルエラーになってしまいました なぜelse ifと書くのでしょうか? 以上3点について教えてください。よろしくお願いいたします。

  • 3つの連続する整数の積は6の倍数であることを式で証明できませんか

    3つの連続する整数の積は6の倍数であることを式で証明できませんか たとえば3つの連続する整数の中に2と3あるいはその倍数が含まれているので その積は必ず6の倍数になるのですが、数を代入せず式として証明したいのですが どなたか証明式を教えてください、お願いします

  • 整数の性質について

    ↓の証明がどうしても分かりません。 (1)ある自然数の平方とその数の和は偶数であることを連続する2つの自然数の積は偶数になることを利用して証明しなさい。 (2)3つの連続する整数では中央の数の2乗より1小さい数は両端の数の積と等しいことを証明しなさい。 (1)はある自然数をnとするとnの二乗+n=偶数になればいいんですよね?? (2)は整数をnとすると連続する3つの整数は(n-1)、n、(n+1)。 nの二乗-1=(n-1)(n+1)でいいんですか?? (1)も(2)も続きが分かりません。 どなたか教えてください!!お願いします。