洛谷 P1306 斐波那契公约数 题解

题面

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

F[n]=a和F[n+1]=b

F[n+2]=a+b,F[n+3]=a+2b,…F[m]=F[m?n?1]a+F[m?n]b

F[n]=a,F[n+1]=b,F[m]=F[m?n?1]a+F[m?n]

F[m]=F[m?n?1]?F[n]+F[m?n]?F[n+1]

gcd(F[n],F[m])=gcd(F[n],F[m?n?1]?F[n]+F[m?n]?F[n+1])

gcd(F[n],F[m])=gcd(F[n],F[m?n]?F[n+1])

引理: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[1],f[2]);

                gcd(F[n],F[n+1])=1;

gcd(F[n],F[m])=gcd(F[n],F[m?n]?F[n+1]);

gcd(F[n],F[m])=gcd(F[n],F[m?n]);

即gcd(F[n],F[m])=gcd(F[n],F[mmodn]);

则gcd(F[n],F[m])=gcd(F[nmodm1],F[m1]);

不难发现,整个递归过程其实就是在求解gcd(n,m)

最后递归到出现F[0],那么此时的f[n]就是答案;

gcd(F[n],F[m])=F[gcd(n,m)];

你可能感兴趣的:(洛谷 P1306 斐波那契公约数 题解)