zoukankan      html  css  js  c++  java
  • 巨大的斐波那契数列

    The i’th Fibonacci number f(i) is recursively defined in the following way: • f(0) = 0 and f(1) = 1 • f(i + 2) = f(i + 1) + f(i) for every i ≥ 0 Your task is to compute some values of this sequence.
    Input Input begins with an integer t ≤ 10,000, the number of test cases. Each test case consists of three integers a, b, n where 0 ≤ a,b < 264 (a and b will not both be zero) and 1 ≤ n ≤ 1000.
    Output
    For each test case, output a single line containing the remainder of f(ab) upon division by n.
    Sample Input
    3 1 1 2 2 3 1000 18446744073709551615 18446744073709551615 1000
    Sample Output
    1 21 250

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    typedef unsigned long long ll;
    using namespace std;
    const int maxn=1000+10;
    
    ll a,b;
    int f[maxn*maxn],n,M;
    
    int pow(ll a,ll p,int Mod)
    {
        int ret=1;
        while(p)
        {
            if(p & 1)ret*=a,ret%=Mod;
            a*=a;a%=Mod;
            p>>=1;
        }
        return ret;
    }
    
    inline void solve()
    {
        cin>>a>>b>>n;
        if(n==1||!a){printf("0
    ");return ;}
        f[1]=1,f[2]=1;
        for(int i=3;i<=n*n+10;i++)
        {
            f[i]=f[i-1]+f[i-2];f[i]%=n;
            if(f[i]==f[2]&&f[i-1]==f[1]) {M=i-2;break;}
        }
        int k=pow(a%M,b,M);
        printf("%d
    ",f[k]);
    }
    
    int main()
    {
        int T;cin>>T;
        while(T--) solve();
        return 0;
    }
  • 相关阅读:
    二分图最大匹配的K&#246;nig定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/ylrwj/p/10786272.html
Copyright © 2011-2022 走看看