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;
    	}
    }


  • 相关阅读:
    基于node.js 的 websocket的移动端H5直播开发
    c# 基于RTMP推流 PC+移动端 拉流播放
    Android Studio解决Error:moudle not specified
    能ping通域名,却不能上网
    转 Postman访问Webapi的Get/Post/Put/Delte请求
    Sqlite 参数化 模糊查询 解决方案
    autofac使用总结
    windows7 安装pytorch
    linux nginx 如何配置多个端口
    委托应用实例演变
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5013903.html
Copyright © 2011-2022 走看看