$m$が合成数であるとき、$m$の($1$でない)約数には逆元がない。逆元がない数を掛けて(さらに剰余を取って)しまうと、掛けた数が何であったかを覚えていても、元の掛けられた数が何であったかを復元できない。一般の実数に$0$を掛けたときのように、情報が落ちてしまう。よって、$m$が合成数であるとき、計算途中では掛け算を行ってはならない。この問題は、逆数を計算しようとしなければ解決できる。-1$として逆数を持てばよい。掛けられるべき階乗のそれぞれに関して、それを素因数分解した表現を取り回せばよい。参考http://kmjp.hatenablog.jp/entry/2013/05/11/0900http://rsujskf.blog32.fc2.com/blog-entry-2445.htmlimplementation素因数分解libraryにバグがあった。最近混入したものか古いものかは分からない。