【UVa】[11582]Colossal Fibonacci Numbers!

这里写图片描述

涉及 快速幂取模
根据斐波那契数列取模之后的规律性
可解得

#include<stdio.h>
int b[1000020];
int pow_mod(unsigned long long a,unsigned long long b,int m) {
    if(b==0)
        return 1;
    int x=pow_mod(a,b/2,m);
    unsigned long long res=(unsigned long long)x*x%m;
    if(b&1)
        res=res*a%m;
    return (int)res;
}
int main() {
//  a[0]=0;
//  a[1]=1;
//  for(int i=2; i<1000020; i++) {
//      a[i]=a[i-1]+a[i-2];
//  }
    int T;
    scanf("%d",&T);
    while(T--) {
        unsigned long long n,m;
        int k;
        scanf("%llu %llu %d",&n,&m,&k);
        if(n==0||k==1) {
            printf("0
");
            continue;
        }
        int cnt=0;
        b[0]=0;
        b[1]=1;
        for(int i=2; ; i++) {
            b[i]=b[i-1]+b[i-2];
            b[i]%=k;
            if(b[i]==1&&b[i-1]==0) {
                cnt=i-1;
                break;
            }
        }
        int t=pow_mod(n%cnt,m,cnt);
        printf("%d
",b[t]);
    }
    return 0;
}

【UVa】[11582]Colossal Fibonacci Numbers!

原文地址:https://www.cnblogs.com/BoilTask/p/12569569.html