活動日誌'19 No.015

投稿者 NOSS | 2019-10-22

こんにちは、NOSSです。
今回はmod演算についての講習会を行いました。

また、3名の留学生の方に見学に来ていただきました。

講習会

秋学期に入って1回目の講習会ですが、かなり数学よりの内容になってしまいました。

  • ユークリッド互除法、拡張ユークリッド互除法
  • 繰り返し2乗法
  • modの逆元
  • フェルマーの小定理

基本的なmod演算はすでに経験がある人も多いかと思いますが、modの逆元が存在するのはかなり以外だったと思います。

参考サイト

コンテスト

YNU CPC 2019 VC 026 A

あまりを取る問題を中心に集めました。

簡単な解説

けんしょう先生のお菓子配り

aa % b = 0 ならば 00、そうでないならば b(ab - (a % b) が答え。

□□□□□

a×ba \times b の長方形 (a<b)(a < b) を作り、あまりが ccだとすると、a×b+c=Na \times b + c = N となる。
ここで aa を決めると b=N/a,c=Nb = \lfloor N/a \rfloor, c = N % a と求められる。
よって 1aN1 \le a \le \sqrt{N} の各 aa について b,cb,c を求め、min(ba+c)\min(b-a+c) をとれば答えが求められる。

Training Camp

N!mod  109+7N! \mod 10^9+7 を求める。
for文で1,2,,N1,2,…,Nをかけていけばよい。
ただし、64bit整数を使うこととかけ算を行う毎にmodをとる必要があることに注意。

Modulo Summation

f(m)f(m)m=(a1a2a3aN)1m = (a_1 a_2 a_3 … a_N) - 1 のとき最大値 i=1N(ai1)\sum_{i=1}^{N} (a_i - 1) をとる。

Factors of Factorial

まず約数の個数の求め方を考える。A=p1k1p2k2pmkmA = p_1^{k_1} p_2^{k_2} … p_m^{k_m} と素因数分解できるとき、その約数の個数は (k1+1)(k2+1)(km+1)(k_1 + 1)(k_2 + 1)…(k_m + 1) で求められる。
よって N!N! の素因数分解ができれば答えが求められる。 これは 1iN1 \le i \le N の各 ii を素因数分解した結果から求めることができる。

多重ループ

重複組み合わせ。(N+K1K)=(N+K1)!(N1)!K!\binom {N+K-1}{K} = \frac{(N+K-1)!}{(N-1)!K!}