https://vjudge.net/problem/UVA-11582
题意:求 斐波那契数列第a^b 项 %n的余数
a,b < 2^64,n<1000
找循环节,最多n^2项一定会出现循环节
#include<cstdio> using namespace std; typedef unsigned long long LL; int f[1000010]; void read(LL &x) { x=0; char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0' && c<='9') { x=x*10+c-'0'; c=getchar(); } } int main() { int T; scanf("%d",&T); LL a,b; int n; while(T--) { read(a); read(b); scanf("%d",&n); if(n==1) { printf("0 "); continue; } f[1]=f[2]=1; int i; for(i=3;;i++) { f[i]=(f[i-2]+f[i-1])%n; if(f[i]==1 && f[i-1]==0) break; } i--; int g=1; a%=i; for(;b;b>>=1,a=a*a%i) if(b&1) g=g*a%i; printf("%d ",f[g]); } }