hdu1588:Gauss Fibonacci
对每个0<=i<n求f(g(i))的和,其中f(x)为斐波那契数列第x项,g(i)=k*i+b,k,b,n给定,模数给定。
斐波那契数有一种用矩阵乘法求的方法,这个矩阵A自己写,令F[i]为i和i+1的那个矩阵,F[i]=A^b*F[0],然后答案要求F[b]+F[k+b]+F[k*2+b]+……=(A^b+A^(k+b)+A^(2k+b)+……)*F[0]=(E+A^k+……+A^k^(n-1))*A^b*F[0]的[2,1]项。上面括号里就令B=A^k求E+B+B^2+……+B^(n-1),可以求吧!
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
//#include<iostream>
using namespace std; #define LL long long
LL K,b,n,mod;
typedef LL mat[][];
mat ans,base,E,a,f,t;
void copy(mat &a,mat b)
{
for (int i=;i<=;i++)
for (int j=;j<=;j++)
a[i][j]=b[i][j];
}
void mul(mat a,mat b,mat &ans)
{
mat t;
memset(t,,sizeof(t));
for (int i=;i<=;i++)
for (int j=;j<=;j++)
for (int k=;k<=;k++)
t[i][j]=(t[i][j]+a[i][k]*b[k][j]%mod)%mod;
copy(ans,t);
}
void add(mat a,mat b,mat &ans)
{
for (int i=;i<=;i++)
for (int j=;j<=;j++)
ans[i][j]=a[i][j]+b[i][j];
}
void init(mat &a)
{
a[][]=a[][]=;
a[][]=a[][]=;
}
void pow(mat a,LL b,mat &ans)
{
mat t,tmp;init(t);copy(tmp,a);
while (b)
{
if (b&) mul(t,tmp,t);
mul(tmp,tmp,tmp);
b>>=;
}
copy(ans,t);
}
void sum(mat a,LL b,mat &ans)
{
mat last,tmp,f,t;
memset(ans,,sizeof(ans));
init(f);init(last);
copy(tmp,a);
while (b)
{
if (b&)
{
mul(f,last,t);
add(ans,t,ans);
mul(last,tmp,last);
}
add(tmp,E,t);
mul(f,t,f);
mul(tmp,tmp,tmp);
b>>=;
}
}
int main()
{
a[][]=a[][]=a[][]=;a[][]=;
E[][]=E[][]=;E[][]=E[][]=;
while (~scanf("%lld%lld%lld%lld",&K,&b,&n,&mod))
{
ans[][]=;ans[][]=ans[][]=ans[][]=;
pow(a,b,t);mul(t,ans,ans);
pow(a,K,base);sum(base,n,f);
mul(f,ans,ans);
printf("%lld\n",ans[][]);
}
return ;
}
hdu1588:Gauss Fibonacci的更多相关文章
- HDU:Gauss Fibonacci(矩阵快速幂+二分)
http://acm.hdu.edu.cn/showproblem.php?pid=1588 Problem Description Without expecting, Angel replied ...
- POJ3233]Matrix Power Series && [HDU1588]Gauss Fibonacci
题目:Matrix Power Series 传送门:http://poj.org/problem?id=3233 分析: 方法一:引用Matrix67大佬的矩阵十题:这道题两次二分,相当经典.首先我 ...
- HDU - 1588 Gauss Fibonacci (矩阵高速幂+二分求等比数列和)
Description Without expecting, Angel replied quickly.She says: "I'v heard that you'r a very cle ...
- HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)
HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意: g(i)=k*i+b;i为变量. 给出 ...
- 【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。
第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归 ...
- C++项目參考解答:求Fibonacci数列
[项目:求Fibonacci数列] Fibonacci数列在计算科学.经济学等领域中广泛使用,其特点是:第一.二个数是1,从第3个数開始,每一个数是其前两个数之和.据此,这个数列为:1 1 2 3 5 ...
- HDU 1588 Gauss Fibonacci(矩阵快速幂)
Gauss Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- UVa-11582:Colossal Fibonacci Numbers!(模算术)
这是个开心的题目,因为既可以自己翻译,代码又好写ヾ(๑╹◡╹)ノ" The i’th Fibonacci number f(i) is recursively defined in the f ...
- 【HDU 1588】 Gauss Fibonacci
[题目链接] 点击打开链接 [算法] 要求 f(g(0)) + f(g(1)) + f(g(2)) + ... + f(g(n-1)) 因为g(i) = k * i + b 所以原式 = f(b) + ...
随机推荐
- nodejs中相互引用(循环引用)的模块分析
话不多少,直接上源码吧: modA.js: module.exports.test = 'A'; const modB = require('./05_modB'); console.log( 'mo ...
- iOS 动画(基于Lottie封装)
一般app中都会带有动画,而如果是一些复杂的动画,不但实现成本比较高,而且实现效果可能还不能达到UI想要的效果,于是我们可以借助lottie来完成我们想要的动画. lottie动画1.gif ...
- Oracle ORA
ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...
- java工作流activiti的步骤
链接:activiti 表名称的解释 工作流从流程定义到创建一个流程实例完成执行步骤(省略bpmn的画法) 工作流的所有操作都是使用流程引擎来进行操作的,流程引擎只是存储流程的过程,而不存储具体的业务 ...
- OpenCV2:总结篇 工具方法函数
一.简介 OpenCV提供了一些工具方法函数来辅助完成图像运算 二.时间相关 1.getTickCount()和getTickFrequency() double tTime; tTime = (do ...
- spring注解开发-容器创建全过程(源码)
1.Spring容器的创建会经历refresh()方法[创建刷新](以AnnotationConfigApplicationContext为例) public AnnotationConfigAppl ...
- 数组对象分类个数js
<script type="text/javascript"> $(function(){ var aaa = [ {"task1":"z ...
- luogu P1008 三连击
题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2: ...
- SDOI2011 拦截导弹
题目描述 题解: 对于第一问,我们求二维LIS即可; 对于第二问,我们可以记录向前最长长度,向前最长方案数,向后最长长度,向后最长方案数. 其实改改树状数组即可. 还有,方案数一定要开double. ...
- 9. FILES
9. FILES FILES表提供有关存储MySQL表空间数据的文件的信息. FILES表提供有关InnoDB数据文件的信息. 在NDB Cluster中,此表还提供有关存储NDB Cluster D ...