忘れていた順列と組み合わせ

曇り仕事で、駅から駅の所要時間を調べる案件があった。 乗換案内みたいに○時○分発の電車に乗って、○駅で○分発の電車に乗り換えてみたいな細かい情報はいらず、○駅~○駅が○分だけでいい。 Google Directions APIを使おうと思ったけど、これは対応していなかった。 対応していないというか、対応しているのだけど、謎の力によって無効化されているのだ。
車、自転車、徒歩での利用はできるのだけど、公共交通機関だけ謎の力で無効化にされている、それも日本だけ。 他の国では使えるらしい。
「路線検索」とか「乗り換え検索」で調べるといくつか有名なサービスが出てくるのだけど、それらは有料で同じようなAPIを提供している。 普通に考えると、これらの企業がGoogleに無効化するように何かしら手を回しているとしか考えられない。 さて、GoogleのAPIが使えなくなってしまったが、何か代替手段を探さなくてはならない。

それと同じ案件で、駅から駅の組み合わせはどれくらいあるのか調べようと思った。 数学で「順列」とか「組み合わせ」を習ったのが中学生か高校生か忘れてしまったが、「順列」は順番までチェックする。 例えば2->3と3->2は別物。 一方組み合わせは順番は見ないので2,3と3,2は同じ。
1~5まで数字で、2つの順列は
1,2 1,3 1,4 1,5
2,1 2,3 2,4 2,5
3,1 3,2 3,4 3,5
4,1 4,2 4,3 4,5
5,1 5,2 5,3 5,4
の20パターン。

一方組み合わせは
1,2 1,3 1,4 1,5
2,3 2,4 2,5
3,4 3,5
4,5
の10パターン。 数字が5つだと手作業でも簡単に出せるけど、調べようと思っているのは2200くらいでの組み合わせだったので、公式を調べないと無理だなと思ってググった。

cが求めたい数、総数がn、組み合わせられる数がr、ここでは2の場合
c=n!/(r!(n-r)!)
で求められると書いてあった。
わかりやすくn=2000として、代入すると
c=2000!/(2!1998!)
「!」がなんなのかわからなかったのだけど、5!だったら「5*4*3*2*1」、3!だったら「3*2*1」ということのようだ。
なので2000!は2000*1999*1998*1997*….2*1というとんでもない数字になるので計算が死ぬほど大変だと、桁数が大きすぎて普通のコンピュータじゃ計算できない。
だけど、分数なので分母にある1998!と相殺というか消せるので
分子は2000*1999だけ残る。 分母は2!なので2*1のみ残る。
ということで、2000*1999/2が答えとなる。

ということを中学か高校で間違いなくやっているはずなのだが、全くやった記憶がなかった…… で、求めたい数は200万近くの組み合わせになることがわかった。 これプログラムの計算で必要なので、データベースに登録しないといけない。