[yukicoder] No. 1232 2^x = x
問題
方針
\( p = 2 \) のときは \( x = 2 \) が答えとなります。それ以外について考えます。フェルマーの小定理より、
\[2^{p-1} \bmod p = 1\]
となるので、自然数 \( t \) について、
\[ 2^{t(p – 1)} \bmod p = 1\]
となります。ここで、
\[t(p – 1) \bmod p = 1\]
を満たす \( t \) について考えると、
\begin{eqnarray}
t(p – 1) \bmod p &=& 1\\
-t \bmod p &=& 1\\
(p – t) \bmod p = 1
\end{eqnarray}
となるので、\( p -t = 1 \) より、\( t = p – 1 \) となります。したがって、
\begin{eqnarray}
2^{(p – 1)^2} \bmod p &=& 1\\
(p-1)^2 \bmod p &=& 1
\end{eqnarray}
となります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N; cin >> N; ll p[N]; for (int i = 0; i < N; i++) { cin >> p[i]; } for (int i = 0; i < N; i++) { if (p[i] == 2) { cout << 2 << "\n"; } else { ll t = p[i] - 1; cout << t * t << "\n"; } } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません