zoukankan      html  css  js  c++  java
  • 矩阵递推关系的建立 and 矩阵快速幂

    • [递推关系的建立]

    • [矩阵快速幂模板]
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int inf = 0x3f3f3f3f;
    const int mod = 1e9+7;
    const int N = 2;
    struct ma{
    	ll a[N][N];
    	void init()// 初始化为单位矩阵 
    	{
    		memset(a,0,sizeof a);
    		for(int i=0;i<N;i++) a[i][i] = 1;
    	}
    };
    ma mul(ma a,ma b)// 矩阵相乘 
    {	
    	ma ans;  
    	for(int i=0; i<N; i++)// N:第一个矩阵的行 
    	{
    		for(int j=0; j<N; j++)// N:第二个矩阵的列 
    		{
    			ll s = 0;
    			for(int k=0; k<N; k++) // N:第二个矩阵的列 
    			{
    				s = ( s + a.a[i][k]*b.a[k][j]%mod )%mod;
    			}
    			ans.a[i][j] = s;
    		}
    	}
    	return ans;
    }
    ma qpow(ma aa,ll bb)// 矩阵快速幂 
    {
    	ma ans;
    	ans.init();
    	while( bb )
    	{
    		if( bb&1 ) ans = mul(ans,aa);
    		aa = mul(aa,aa);
    		bb >>= 1;
    	}
    	return ans;
    } 
    
    int main()
    {
    	int n; 
    	while( cin>>n )
    	{
    		ma a;
    		a.a[0][0] = a.a[0][1] = a.a[1][0] = 1;
    		a.a[1][1] = 0;
    		ma ans = qpow(a,n);
    		cout<<ans.a[0][0]<<" "<<ans.a[0][1]<<"
    ";
    		cout<<ans.a[1][0]<<" "<<ans.a[1][1]<<"
    ";
    	 } 
    	 /*
    		很容易就可以发现当f[1] = f[2] = 1;
    		ans.a[0][0] = f[n+1] 
    		ans.a[0][1] = f[n] 
    	*/
    } 
    
    
  • 相关阅读:
    Scrapy爬虫框架
    python Re库的介绍
    正则表达式,regular expression, regex, RE
    信息标记的三种形式
    python Beautiful Soup库入门
    python requests第三方库详解
    递归算法
    枚举算法
    MySQL CONCAT()与GROUP_CONCAT()的使用
    关于日期函数查询总结
  • 原文地址:https://www.cnblogs.com/xiaoxiao179/p/13603783.html
Copyright © 2011-2022 走看看