首页 > 代码库 > UVA 11582 Colossal Fibonacci Numbers!
UVA 11582 Colossal Fibonacci Numbers!
斐波那契数列。。。
利用斐波那契数列的循环:因为结果%n,所以最多有n^2个数后会出现循环。
预处理,不能直接用f[maxn][maxn^2]来保存,数组太大。。。
所以用vector来保存斐波那契数列%n 的值。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <vector> 7 #include <queue> 8 using namespace std; 9 10 typedef unsigned long long ll;11 12 const int maxn=1005;13 14 ll pow_mod (ll a,ll b,int n){15 ll ans=1;16 while (b){//cout<<b<<endl;17 if (b&(ll)1)18 ans=(ans*a)%n;19 a=(a*a)%n;20 b>>=1;21 }22 return ans;23 }24 25 vector<int> f[maxn];26 27 void init (){28 for (int mod=2;mod<maxn;mod++){29 int a,b,c;30 a=0;b=1;c=(a+b)%mod;31 f[mod].push_back (a);32 f[mod].push_back (b);33 f[mod].push_back (c);34 while (!(b==0&&c==1)){35 a=b;b=c;c=(a+b)%mod;36 f[mod].push_back (c);37 }38 f[mod].pop_back ();39 f[mod].pop_back ();40 //cout<<mod<<":"<<f[mod].size()<<" ";41 }42 }43 44 int main (){45 int t,n;46 ll a,b;47 init ();48 cin>>t;49 //scanf ("%d",&t);50 while (t--){51 cin>>a>>b>>n;52 //scanf ("%lld%lld%d",&a,&b,&n); //cout<<a<<" "<<b<<" "<<n<<"ee";53 if (n==1){54 printf ("0\n");55 continue ;56 }57 ll ans;58 int mod;59 mod=f[n].size();60 ans=pow_mod (a%mod,b,mod);//cout<<mod<<endl;61 //printf ("%d\n",f[n][ans%mod]);62 cout<<f[n][ans%mod]<<endl;63 }64 return 0;65 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。