zoukankan      html  css  js  c++  java
  • 矩阵乘法+快速幂+序列递推公式

    1250: Gobonacci

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 75  解决: 11
    [提交][状态][讨论版]

    题目描述

          Fibonacci sequence is well-known to us ,f(0)=1,f(1)=1, f(n) = f(n-1)+f(n-2), how nice the recursion! In addition, the is exponential growth in series. Obviously, Goagain was not content with the fact that the series didn’t increased as rapidly as he had expected, therefore, he designed such a function

    g(0) = a   g(1)= b    g(2)=c

    g(n)=3*g(n-1)+2*g(n-2)+g(n-3)      (n>=2)

         Besides, the function was named after Goagain series. What made him distracted was that he could hardly calculate the series.

         By the way , goagain without any festival fuck named it Gobonacci sequence

    输入

    Multiple sets of input data, each set including four positive integers a, b, c ,n  ( a, b, c <= 100 , 0<=  n <2^60)

    输出

    Please output the value of g(n), considering the value of g(n) is far too large, output g(n) %100000007  is okay.

    样例输入

    1 1 1 33 2 1 3

    样例输出

    610
    
    
    
    
    #include<iostream>
    using namespace std;
    struct m{long long  int a[3][3]; };
    long long int big = 100000007;
    m aa = { 0, 1, 0, 0, 0, 1, 1, 2, 3 };
    m mul(m a, m b){
    	int i, j, k;
    	m c;
    	for (i = 0; i < 3;i++)
    	for (j = 0; j < 3; j++)
    	{
    		c.a[i][j] = 0;
    		for (k = 0; k < 3; k++)
    			c.a[i][j] +=( (a.a[i][k]%big) * (b.a[k][j]%big))%big;
    		c.a[i][j] %= big;
    	}
    	return c;
    }
    m power(m a, long long int n){
    	if (n == 1)return a;
    	m b = power(a, n / 2);
    	m c = mul(b, b);
    	if (n % 2 == 1)c = mul(a, c);
    	return c;
    }
    int main(){
    	freopen("in.txt", "r", stdin);
    	long long int a, b, c, n;
    	while (cin >> a >> b >> c >> n){
    		if (n == 0){ cout << a << endl; continue; }
    		if (n == 1){ cout << b << endl; continue; }
    		if (n == 2){ cout << c << endl; continue; }
    		m ans = power(aa, n-2);
    		cout << (ans.a[2][0] * a + ans.a[2][1] * b + ans.a[2][2] * c) % big << endl;
    	}
    }


  • 相关阅读:
    触发事件trigger
    淘宝天猫关键词SEO优化
    Linux下升级python
    python3多线程趣味详解
    python之selenium
    1kkk
    python之lxml(xpath)
    python中时间日期格式化符号
    唯品会数据采集-异步瀑布流
    python数据库操作pymysql
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5013903.html
Copyright © 2011-2022 走看看