E - Geometric Progression 解説 by kyopro_friends


剰余の法 MM と互いに素とは限らない数 KK で最後に一度だけ除算を行いたい場合、予め途中の計算を全て modMK\bmod MK で行えばよいです。

今回求めるものは AX1A1\displaystyle \frac{A^X-1}{A-1} なので AX1A^X-1mod(M(A1))\bmod (M(A-1)) で求めればよいです。M(A1)M(A-1)101810^{18} 程度の大きさになるため、計算には多倍長整数(128bit整数)を用いるなどの工夫が必要です。(繰り返し”二倍法”により64bitの範囲で計算することもできます)

A=1A=1 のケースに注意しましょう。

実装例(Python)

Copy
  1. A,X,M=map(int,input().split())
  2. if A==1:
  3. print(X%M)
  4. else:
  5. print( (pow(A,X,M*(A-1))-1) // (A-1) % M)
A,X,M=map(int,input().split())
if A==1:
  print(X%M)
else:
  print( (pow(A,X,M*(A-1))-1) // (A-1) % M)

投稿日時:
最終更新:



2025-04-09 (水)
23:03:20 +00:00