keidaroo’s diary

底辺系競プロer

全然分かりません

abc034.contest.atcoder.jp
この問題なのですが、満点解法が全く分かりません。

たんちゃんさんのコードを参考にさせて頂いています
Submission #1435215 - AtCoder Beginner Contest 034 | AtCoder

毎回一瞬わかって、そのあとなぜか忘れて分からない状態が続くの、どうにかしてほしい

本題

フェルマーの小定理というものを使うらしい。
それの内容と証明自体はわかった。

(h+w-2)!/(h-1)!*(w-1)! % mod(10e9)という風になる
ここで、たんちゃんさんのコードによると、はじめのfor文で、h-1!を割っているように私には見えます。。これは本当なのでしょうか?←疑問点ポイント1

また、次のfor文で、iがh-1までループしていて、そこで、あれ?これh-1!で割ってね?ってなって更に疑問です


また、calc関数は、aのb乗をpで割ったあまりだそうですが、これについては何となくコードの内容も理解できました。ただ、コードを見ないと分からないので、本当に理解しているわけではないです。でも解説聞いたらうんうんって行くぐらいになっているとは思います。
自分用にメモっておくと、

  • フェルマーの定理より、  a^(p-2) ≡ a^(-1)(mod p)
  • なので、aのm-2乗でかける!これをそのあとmodであまり求める!答え同じ!

うーん、でもこれ使ってどうして上手くいくのだろうか
なぜかって、これ一つ一つの余りであって、全体の余りじゃないから、感覚てきに違う気がする。。←疑問点2

やっぱりフェルマーの小定理が良くわかっていない。。ここはリアルで誰かに聞きます。。

あと、一回目のfor文で掛け算したものの余りを求めたじゃないですか
余りを割るのってだめじゃね?とかなったので、これも教えて下さい!←疑問点三

疑問点2以外を教えて下さい!!twitterでもなんでもいいので教えて下さい!