uva11582 Colossal Fibonacci Numbers!
好久没写博客了,随便捡道有点意思的题目写写。
首先a,b的范围都到unsigned long long了有木有,最后f(a^b)还要再mod上n
那么看到n的范围才1000,f(x)的递推式又有了,很容易就想到周期这东西。
那么对a^b用快速幂的话,nice~
剩下来的就是水水的东西了。。。
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <string> #include <algorithm> using namespace std; int f[10010],mod; int gao(){ f[0]=0,f[1]=1%mod; for(int i=2;;i++){ f[i]=(f[i-1]+f[i-2])%mod; if(f[i]==f[0]&&(f[i]+f[i-1])%mod==f[1]) return i; } return 1; } unsigned long long a,b; int pow(int x,unsigned long long n){ if(n==0) return 1%mod; int ret=pow(x,n/2); ret=ret*ret%mod; if(n&1) return ret*x%mod; else return ret; } int t,n,T; int main(){ scanf("%d",&t); while(t--){ cin>>a>>b>>n; mod=n; T=gao(); mod=T; int x=pow(a%mod,b); printf("%d\n",f[x%T]); } return 0; } /* 18446744073709551610 18446744073709551609 1000 875 */
话说,无意中看见lrj大神也在切这题,瞬间吓尿。。。