Uva11582 Colossal Fibonacci Numbers!

来源:互联网 发布:ps cs6序列号 mac版 编辑:程序博客网 时间:2024/06/08 12:05

传送门:https://vjudge.net/problem/UVA-11582

这道题比较烦的事时unsigned long long和long long的区别,很坑呀

如果是long long,由于数据太大,会出问题·

而unsigned long long,由于一定是正数,即使溢出,也是对2<<64的求模运算的结果

(该题具体分析紫书上有)

#include <bits/stdc++.h>using namespace std;typedef  long long ll;const int maxn=1000+5;int f[maxn][maxn*6],period[maxn];int fast_pow(ll a,ll b,int mod){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;}void ini(){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-1] + f[n][i-2]) % n;      if(f[n][i-1] == 0 && f[n][i] == 1) {        period[n] = i - 1;        break;      }    }  }}int solve(ll a, ll b, int n) {  if(a == 0 || n == 1) return 0; // attention!  int p = fast_pow(a % period[n], b, period[n]);  return f[n][p];}int main(){std::ios::sync_with_stdio(false);ini();int T;cin>>T;while(T--){int n;ll a,b;cin>>a>>b>>n;cout<<solve(a,b,n)<<endl;}return 0;} 




原创粉丝点击