Another kind of Fibonacci

题目链接

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)

Problem Description

As we all known , the Fibonacci series : F(0) = 1, F(1) = 1, F(N) = F(N - 1) + F(N - 2) (N >= 2).Now we define another kind of Fibonacci : A(0) = 1 , A(1) = 1 , A(N) = X * A(N - 1) + Y * A(N - 2) (N >= 2).And we want to Calculate S(N) , S(N) = A(0)^2 +A(1)2+……+A(n)2.

Input

There are several test cases.

Each test case will contain three integers , N, X , Y .

N : 2<= N <= 2^31 – 1

X : 2<= X <= 2^31 – 1

Y : 2<= Y <= 2^31 – 1

Output

For each test case , output the answer of S(n).If the answer is too big , divide it by 10007 and give me the reminder.

Sample Input

2 1 1

3 2 3

Sample Output

6

196

思路见下图:

#include<iostream>
#include<cstring>
using namespace std; const int maxn = 5;
typedef long long LL; struct Matrix{
int matrix[maxn][maxn];
}ori, ans; int n = 4, N, X, Y, m = 10007; void init()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ori.matrix[i][j] = ans.matrix[i][j] = 0;
ori.matrix[0][0] = ori.matrix[2][1] = 1;
ori.matrix[0][1] = ori.matrix[1][1] = X * X % m;
ori.matrix[0][2] = ori.matrix[1][2] = Y * Y % m;
ori.matrix[0][3] = ori.matrix[1][3] = ((2 * X) % m) * Y % m;
ori.matrix[3][1] = X;
ori.matrix[3][3] = Y;
ans.matrix[0][0] = 2;
ans.matrix[1][0] = ans.matrix[2][0] = ans.matrix[3][0] = 1;
} Matrix multiply(Matrix a, Matrix b)
{
Matrix temp;
memset(temp.matrix, 0, sizeof(temp.matrix));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
temp.matrix[i][j] = (temp.matrix[i][j] + ((a.matrix[i][k] * b.matrix[k][j]) % m)) % m;
return temp;
} //矩阵的b次幂
Matrix binaryPow(int b)
{
Matrix temp;
memset(temp.matrix, 0, sizeof(temp.matrix));
for(int i=0;i<n;i++)
temp.matrix[i][i] = 1;
while(b > 0)
{
if(b & 1)
temp = multiply(ori, temp);
ori = multiply(ori, ori);
b >>= 1;
}
return temp;
} int main()
{
//freopen("in.txt","r", stdin);
while(cin>>N>>X>>Y)
{
X %= m;
Y %= m;
init();
Matrix temp = binaryPow(N - 1);
ans = multiply(temp, ans);
cout<<ans.matrix[0][0]<<endl;
}
return 0;
}

杭电oj3306:Another kind of Fibonacci(矩阵快速幂)的更多相关文章

  1. poj 3070 Fibonacci (矩阵快速幂乘/模板)

    题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...

  2. poj 3070 Fibonacci 矩阵快速幂

    Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...

  3. HDU 1588 Gauss Fibonacci(矩阵快速幂)

    Gauss Fibonacci Time Limit: 3000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) ...

  4. UVA - 10229 Modular Fibonacci 矩阵快速幂

                                 Modular Fibonacci The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 3 ...

  5. POJ 3070 Fibonacci 矩阵快速幂模板

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18607   Accepted: 12920 Descr ...

  6. poj3070 Fibonacci 矩阵快速幂

    学了线代之后 终于明白了矩阵的乘法.. 于是 第一道矩阵快速幂.. 实在是太水了... 这差不多是个模板了 #include <cstdlib> #include <cstring& ...

  7. $loj$10222 佳佳的$Fibonacci$ 矩阵快速幂

    正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\s ...

  8. POJ 3070 Fibonacci矩阵快速幂 --斐波那契

    题意: 求出斐波那契数列的第n项的后四位数字 思路:f[n]=f[n-1]+f[n-2]递推可得二阶行列式,求第n项则是这个矩阵的n次幂,所以有矩阵快速幂模板,二阶行列式相乘, sum[ i ] [ ...

  9. POJ3070:Fibonacci(矩阵快速幂模板题)

    http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...

  10. hdu 3306 Another kind of Fibonacci 矩阵快速幂

    参考了某大佬的 我们可以根据(s[n-2], a[n-1]^2, a[n-1]*a[n-2], a[n-2]^2) * A = (s[n-1], a[n]^2, a[n]*a[n-1], a[n-1] ...

随机推荐

  1. ffmpeg使用C语言sdk实现抽取视频中的视频数据

    主要使用函数 特征码:Start code 解码的一些视频参数,分辨率和帧率:SPS/PPS ffmpeg获取SPS/PPS:codec->extradata 实例 #include <s ...

  2. PHP开发者该知道的5个Composer小技巧

    Composer 是新一代的PHP依赖管理工具.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单 co ...

  3. C++11并发编程2------线程管理

    本节内容: 启动一个线程 每个程序都至少会有一个线程,main函数是执行入口,我们称之为主线程,其余子线程有各自的入口函数,主线程和子线程同时运行.子线程在std::thread对象创建时启动. 1. ...

  4. Write-up-Toppo

    关于 下载地址:点我 哔哩哔哩:哔哩哔哩 信息收集 vmnet8网卡,IP:192.168.131.144,开放web,ssh服务 ➜ ~ ip a show dev vmnet8 5: vmnet8 ...

  5. 服务端OLEVARIANT数据之后传输

    将OLEVARIANT数据流化,然后对流进行压缩,还原成OLEVARIANT以后再发送. procedure StreamToVariant(Stream: TStream; var V: OLEVa ...

  6. shell脚本中执行sql脚本(mysql为例)

    1.sql脚本(t.sql) insert into test.t value ("LH",88); 2.shell脚本(a.sh     为方便说明,a.sh与t.sql在同一目 ...

  7. Maven项目- "null" 的java.lang.reflect.InvocationTargetException 解决方法

    异常显示: 解决方法:

  8. Python—处理Excel表格

    一.使用xlrd和xlwt这两个库来处理excel,即xlrd是读excel的库,xlwt是写excel的库 1.使用 xlrd 读取Excel数据 # -*- coding:utf-8 -*- im ...

  9. Django(十六)基于模板的登录案例:登录装饰器、csrf攻击方式及防护、ajax的Post 的csrf开启写法、生成验证码、加验证码登录、反向解析+传参

    一.csrf攻击 1.1 csrf攻击(跨站请求伪造) [csrf攻击即]:通过第3方网站,伪造请求(前提条件是你已经登录正常网站,并保存了session或cookie登录信息且没有退出),第三方网站 ...

  10. AC自动机 (模板)

    AC自动机是用来干什么的: AC自动机是用来解决多模匹配问题,例如有单词s1,s2,s3,s4,s5,s6,问:在文本串ss中有几个单词出现过,类似. AC自动机实现这个功能需要三个部分: 1.将所有 ...