斐波那契數列最大公約數
阿新 • • 發佈:2018-11-11
結論:\((fib_n,fib_m)\)=\(fib_{(n-m)}\)
證明:參考大佬的blog
OrzCTY
(我怎麼記得以前闆闆講過Orz
然後用矩陣快速冪隨便做了。。。
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> using namespace std; const int mod=1e8; long long a,b; struct Matrix{ long long g[3][3]; Matrix(){memset(g,0,sizeof g);} Matrix operator * (const Matrix &rhs) const { Matrix ans; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) (ans.g[i][j]+=(g[i][k]*rhs.g[k][j])%mod)%=mod; return ans; } }A,B; Matrix ksm(Matrix x,long long d) { Matrix res=x; d--; while(d) { if(d&1) res=res*x; x=x*x; d>>=1; } return res; } long long gcd(long long a,long long b) { return b?gcd(b,a%b):a; } int main() { cin>>a>>b; long long p=gcd(a,b); A.g[1][1]=A.g[1][2]=A.g[2][1]=1; B=ksm(A,p); cout<<B.g[2][1]; return 0; }