uva 10229 - Modular Fibonacci

考虑到出现出现取模,打印了几组数据发现有循环节长度为3*(1<<(m-1))

#include <iostream>
#include <fstream>
using namespace std;
int fib[2000000];
int main(void)
{
    int m,n;
    while(scanf("%d %d",&n,&m) != EOF)
    {
        if(!m)
            printf("0\n");
        else
        {
            fib[0] = 0;
            fib[1] = 1;
            int k = 1<<m;
            int len = 3*(1<<m-1);
            for(int j = 2; j < len; j++)
                fib[j] = ((fib[j-1])%k + (fib[j-2])%k)%k;
            printf("%d\n",fib[n%len]);
        }
    }
    return 0;
}


你可能感兴趣的:(uva 10229 - Modular Fibonacci)