uva11582(模算数)

2019-04-13 14:38发布

题目大意: 1.f(0) = 0 and f(1) = 1•  2.f(i + 2) = f(i + 1) + f(i)(i>=0) 现在给出a,b,n,求f(a^b)除以n的余数。
题目分析: 这个题目的关键就是要知道这个序列(f[i]%n)是有循环节的。
代码: #include #include using namespace std; typedef unsigned long long LL; LL a,b,c; vectorv; LL cal() { v.clear(); v.push_back(0);v.push_back(1); int flag=0; for(int i=2;;i++){ LL ans=(v[i-1]%c+v[i-2]%c)%c; if(ans==0){ flag=1; } if(ans==1){ if(flag==1){ return (LL)v.size()-1; } } else if(ans){ flag=0; } v.push_back(ans); } } LL poww_add(LL a,LL b,LL mod) { LL ans=0; while(b) { if(b&1) ans=(ans%mod+a%mod)%mod; b>>=1; a=(a%mod+a%mod)%mod; } return ans; } LL poww_mul(LL a,LL b,LL mod) { LL ans=1; while(b) { if(b&1) ans=poww_add(ans,a,mod)%mod; b>>=1; a=poww_add(a,a,mod)%mod; } return ans; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T; cin>>T; while(T--) { cin>>a>>b>>c; if(c==1){ cout<<0<