uva 11582 lrj-P316 斐波那契大数

来源:互联网 发布:sql count 用法 编辑:程序博客网 时间:2024/06/05 18:43

给出无符号64位的a b两个数,要求斐波那契数列中第a的b次方个数是多少?(此数对n取模)

取模运算a^b%n=(a%n)^b,运用快速幂搞一手就好了

然后这里需要注意的是无符号输入的格式问题,见代码,以及n为1的情况,深入思考一下就好了



#include<stdio.h>#define LL unsigned long longLL mod;int f[100000+5];LL fast_pow(LL a,LL b){    LL ans=1;    a=a%mod;    while(b)    {        if(b&1) ans=ans*a%mod;        a=a*a%mod;        b>>=1;    }    return ans;}int main(){    int T;    freopen("in.txt","r",stdin);    scanf("%d",&T);    while(T--)    {        LL a,b,n;        int cnt=3;        scanf("%llu%llu%llu",&a,&b,&n);        f[0]=0;        f[1]=f[2]=1%n;        while(1)        {            f[cnt]=(f[cnt-1]+f[cnt-2])%n;            if(f[cnt-1]==f[0]&&f[cnt]==f[1])                break;            cnt++;        }        mod=cnt-1;        LL ans=fast_pow(a,b);        printf("%d\n",f[ans]);    }    return 0;}


阅读全文
0 0
原创粉丝点击