重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

n≒1000くらいまでコンビネーションnCkを計算できるプログラムを作ろうと思っています。
階乗を使った公式では直ぐに破綻してしまうので
7C3=(7・6・5)/(3・2・1)とやるようなプログラムを組んだのですが
希望より小さなnで破綻してしまいます。
とりあえず、今は7C3=(7/3)・(6/2)・(5/1)とやるような計算法で凌いでいますが
途中で実数計算(整数計算でないという意味)をせざるを得ず、ちょっと気持ち悪いです。
究極のプログラムを組もうという気は無いのですが
もう少し現状を改善したいと思っています。

良きアドバイスをいただけたら幸いです。

A 回答 (11件中11~11件)

nが1000まで行くと二項係数は300桁くらいになってしまうので、そもそ


も計算値を表示できるのかわかりませんが。
1000までならば、1から1000を素因数分解するのは簡単だと思うので、
分子と分母を素因数分解して、分子のうち、分母に現れない素因数の
部分と、分母に現れる素因数の場合は指数の差をとって掛けたものを
計算すればよいとは思います。
つまり、
分子=p1^a1・・・pk^ak・q1^b1・・・qi^bi
分母=p1^c1・・・pk^ck
となるときは、
p1^(a1-c1)・・・pk^(ak-ck)・q1^b1・・・qi^bi
を計算するといった具合です。
これで、指数の部分が小さくなるのである程度爆発は防げる気はします。
分子・分母の素因数とその指数を配列で持たしておいて、ソートして
比較するとかして出来る気はします。
ソフトが何なのか分かりませんけど。
実際やってみたわけではなく、自分でVBAでやるとしたらこうするか
な、と考えたまでです。
    • good
    • 0

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