• 洛谷 1306斐波那契公约数


    题目描述

    还是看了题解

    结论:gcd(f[n],f[m])=f[gcd(n,m)]

      引理:gcd(f[n],f[n+1])=1

      证明:利用辗转相减法:gcd(f[n],f[n+1])=gcd(f[n],f[n+1]-f[n])=gcd(f[n],f[n-1]),一直相减,最后得到gcd(f[n],f[n+1])=gcd(f[1],f[0])=1。

    证明:

      设f[n]=a,f[n+1]=b,

      则f[n+2]=a+b,f[n+3]=a+2b,f[n+4]=2a+3b,f[n+5]=3a+5b,f[n+6]=5a+8b,发现往后每一项a和b前的系数都为斐波那契数,

      所以f[m]=f[m-n-1]*a+f[m-n]*b。

      再看求解gcd的过程:

        gcd(f[n],f[m])=gcd(f[n],f[m]%f[n])

              =gcd(f[n],(f[m-n-1]*a+f[m-n]*b)%f[n])

              =gcd(f[n],f[m-n]*b)=gcd(f[n],f[m-n]*f[n+1]);

        因为gcd(f[n],f[n+1])=1,

        所以gcd(f[n],f[m])=gcd(f[n],f[m-n]),

        即gcd(f[n],f[m])=gcd(f[n],f[m%n]);

        继续向下递归求解,发现这个过程也就是求gcd(n,m)的过程

        所以gcd(f[n],f[m])=f[gcd(n,m)]

    //Gcd(f[a],f[b])=f[Gcd(a,b)]
    #include<complex>
    #include<cstdio>
    using namespace std;
    const int mod=1e8;
    struct Matrix{
        long long sz[2][2];
        inline Matrix operator *(const Matrix &a)const
        {
            Matrix res;
            for(int i=0;i<2;i++)
                for(int j=0;j<2;j++)
                {
                    res.sz[i][j]=0;
                    for(int k=0;k<2;k++)
                        res.sz[i][j]=(res.sz[i][j]+sz[i][k]*a.sz[k][j])%mod;
                }
            return res;
        }
    }a;
    int n,m;
    int Gcd(int a,int b)
    {
        if(!b)return a;
        return Gcd(b,a%b);
    }
    int Fpow(Matrix b,int p)
    {
        Matrix k=b;
        for(;p;p>>=1,k=k*k)
            if(p&1)b=b*k;
        return b.sz[0][0];
    }
    int main()
    {
        a.sz[0][0]=a.sz[0][1]=a.sz[1][0]=1;
        scanf("%d%d",&n,&m);
        n=Gcd(n,m);
        if(n<=2)puts("1");
        else printf("%d
    ",Fpow(a,n-2));
        return 0;
    }
  • 相关阅读:
    【题解】【LOJ2102】「TJOI2015」弦论
    【学习笔记】后缀自动机复习
    【博客介绍】笔者的自我介绍/博客简介
    【题解】【CodeForces653F】Ants on a Circle
    带修莫队
    [BZOJ3832]Rally(线段树+拓扑排序)
    [CTSC2010]星际旅行(带反悔的贪心)
    [TJOI2011]书架
    CF1204E Natasha, Sasha and the Prefix Sums
    [CSP校内集训]ginkgo(树上启发式合并/逆序对)
  • 原文地址:https://www.cnblogs.com/LeTri/p/8780020.html
Copyright © 2020-2023  润新知