• HDU 4549 M斐波那契数列


    数论:当gcd(x,m)=1时,x^(m-1) mod m=1,

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <vector>
    using namespace std;
    const int mod = 1000000006;
    const int mod1= 1000000007;
    struct node
    {
        long long a,b,c,d;
    }org;
    node pows(int m)//n^m
    {
        node ans,tmp;
        ans.a=1;ans.b=0;ans.c=0;ans.d=1;
        if(m>1)
        {
            tmp=pows(m>>1);
            ans.a=(tmp.a*tmp.a+tmp.b*tmp.c)%mod;
            ans.b=(tmp.a*tmp.b+tmp.b*tmp.d)%mod;
            ans.c=(tmp.c*tmp.a+tmp.d*tmp.c)%mod;
            ans.d=(tmp.c*tmp.b+tmp.d*tmp.d)%mod;
        }
        tmp=ans;
        if(m&1)
        {
            tmp.a=(ans.a*org.a+ans.b*org.c)%mod;
            tmp.b=(ans.a*org.b+ans.b*org.d)%mod;
            tmp.c=(ans.c*org.a+ans.d*org.c)%mod;
            tmp.d=(ans.c*org.b+ans.d*org.d)%mod;
        }
        return ans=tmp;
    }
    long long  re_pows(int a,int n)//递归快速乘幂
    {
        if(n==0) return 1;
        long long t=re_pows(a,n>>1);
        long long ans=(t*t)%mod1;
        if(n&1) ans=(ans*a)%mod1;
        return ans;
    }
    int main()
    {
        int a,b,m;
        org.a=0;org.b=1;
        org.c=1;org.d=1;
        while(cin>>a>>b>>m)
        {
            node tmp=pows(m);
            long long ans;
            ans=re_pows(a,tmp.a);
            ans=(ans*re_pows(b,tmp.b))%mod1;
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    JavaScript ECMAScript版本介绍
    Webpack
    路由
    组件(重难点)
    npm包管理工具
    过滤器
    Vue实例生命周期
    数据双向绑定的原理
    MVC + MVVM
    vue事件修饰符
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/3086873.html
Copyright © 2020-2023  润新知