码迷,mamicode.com
首页 > 其他好文 > 详细

uva11582 Colossal Fibonacci Numbers!

时间:2016-06-10 11:02:10      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

快速幂, 循环节,斐波那契数列

只是一个水水的题目,可以看出循环节是小于n^2的,所以先枚举出循环节。然后快速幂取模就可以了。

但要注意必须用unsigned long long,而且我用scanf读入还出现了意想不到的问题,所以只能用cin读入。

这是一个很大的坑点.

#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 10000000 + 10;

typedef unsigned long long LL;
LL a,b,n,m;

int f[maxn];

LL power(LL k,LL e) {
    LL res=1;
    while(e) {
        if(e&1) res=res*k%m;
        k=k*k%m;
        e=e/2;    
    }
    return res;
}

int main() {
    int T;
    cin>>T;
    while(T--) {
        cin>>a>>b>>n;
        if(n==1) {
            cout<<0<<endl;
            continue;    
        }
        f[0]=0; f[1]=1;
        for(int i=2;;i++) {
            f[i]=(f[i-1]+f[i-2])%n;
            if(f[i]==f[1]&&f[i-1]==f[0]) {
                m=i-1;
                break;
            }
        }
        a%=m;
        cout<<f[power(a,b)]<<endl;
    }
    return 0;    
}

uva11582 Colossal Fibonacci Numbers!

标签:

原文地址:http://www.cnblogs.com/invoid/p/5573335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!