- ベストアンサー
コンビネーション,二項係数の求め方
n≒1000くらいまでコンビネーションnCkを計算できるプログラムを作ろうと思っています。 階乗を使った公式では直ぐに破綻してしまうので 7C3=(7・6・5)/(3・2・1)とやるようなプログラムを組んだのですが 希望より小さなnで破綻してしまいます。 とりあえず、今は7C3=(7/3)・(6/2)・(5/1)とやるような計算法で凌いでいますが 途中で実数計算(整数計算でないという意味)をせざるを得ず、ちょっと気持ち悪いです。 究極のプログラムを組もうという気は無いのですが もう少し現状を改善したいと思っています。 良きアドバイスをいただけたら幸いです。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (10)
- Ishiwara
- ベストアンサー率24% (462/1914)
回答No.11
- Ishiwara
- ベストアンサー率24% (462/1914)
回答No.10
- Ishiwara
- ベストアンサー率24% (462/1914)
回答No.9
- kmvblxc
- ベストアンサー率50% (1/2)
回答No.7
- kabaokaba
- ベストアンサー率51% (724/1416)
回答No.6
- kumipapa
- ベストアンサー率55% (246/440)
回答No.5
- kumipapa
- ベストアンサー率55% (246/440)
回答No.4
- info22
- ベストアンサー率55% (2225/4034)
回答No.3
- kumipapa
- ベストアンサー率55% (246/440)
回答No.2
- zk43
- ベストアンサー率53% (253/470)
回答No.1
補足
何度も回答ありがとうございました。 No.10で書かれた通り、再帰タイプは組むのは簡単ですが、実行は大変のようです。 n=1000にもなると何百桁にもなることから 通常の整数型変数では対処しきれないので No.8で教えていただいたように素因数分解を用いる方法で挑戦したいと思います。 ただ思ったのですが、分子も分母も同じ配列で良いのではないでしょうか? 分母に現れたら-1して、分子に現れたら+1すればいいわけなので…。 (組む人の好みに依ると思いますが…) また、No.7で教えていただいたことを組み合わせると符号無し変数も使えそうです。 (EXCEL VBAでは実装していませんが) 問題は関数から抜ける時に、どうやって値を渡すかが次の問題になりそうですが、 とりあえず行けるところまで行ってみたいと思います。 ありがとうございました。