#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <stack > #include <vector> #include <map> #include <set> #include <queue> #include <algorithm> Using namespace Std;typedef unsigned long long ull;const int maxn = 1005;int f[maxn][6*maxn],p[maxn];int pow_mod (ULL a,ull B,int N) {if (b==0) return 1; int K=pow_mod (A,B/2,N); k=k*k%n; if (b%2==1) k=k*a%n; return k;} int Solve (ULL a,ull b,int N) {if (a==0| | N==1) return 0; int Idx=pow_mod (a%p[n],b,p[n]); return F[N][IDX];} int main () {int ncase; int n; for (int n=2;n<=1000;n++) {f[n][0]=0; f[n][1]=1; for (int i=2;; i++) {f[n][i]= (f[n][i-2]+f[n][i-1])%n; if (f[n][i-1]==0&&f[n][i]==1) {p[n]=i-1; Break }}} scanf ("%d", &ncase); while (ncase--) {ULL A, B; cin>>a>>b>>n; Cout<<solve (a,b,n) << "\ n";} return 0;}
Uva11582-colossal Fibonacci numbers! (Modulo operation)