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) + ...
随机推荐
- java写跳一跳辅助程序
##起初是想使用按键精灵脚本程序控制,但还是选择熟悉的java.我这里使用了工具,造成延迟问题.也求教:java控制安卓的正确姿势, 参考了.NET玩跳一跳,思路都是一样的,只不过使用ADB控制安卓的 ...
- Android中进程与线程及如何在子线程中操作UI线程
1. Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view ...
- 工作中Git使用笔记
git相关说明. //git 安装$ git config --global user.name "xxx"代码提交时的用户名,与GITLAB注册用户名建议保持一致$ git co ...
- Photoshop 注册破解
本机测试环境为Photoshop cs4 破解方式一: 打开C:\windows\system32\drivers\etc\"找到 hosts 文件, 右键点击--打开方式---记事本,然后 ...
- SQLite – HAVING 子句
SQLite – HAVING子句 HAVING使您能够指定过滤条件哪一组结果出现在最终的结果. WHERE子句的地方条件选定的列, 在有HAVING 子句的地方 就有GROUP BY子句包含的条件组 ...
- Python 风格规范
分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80 个字符 例外: 如果使用Python 2.4 或更早的版本, 导入模块的行可能多于80 个字符. Pyth ...
- DB9串口引脚定义
在单片机串口通信中,使用3根信号线就能够实现通信:RXD,TXD,GND. 经常使用的RS232串口线使用DB9端子. DB9分为公头和母头两种: 一般使用时,引脚定义如下: 连接方式: 注:RXD- ...
- uva1660 Cable TV Network
点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号.画图就知道u’连v,v’连u. 技巧:不需要枚举S,T.固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)& ...
- window.onload和DOMContentLoaded的区别
一.何时触发这两个事件? 1.当 onload 事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了. 2.当 DOMContentLoaded 事件触发时,仅当DOM加载完 ...
- vue 自定义组件 v-model双向绑定、 父子组件同步通信【转】
父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa" 子组件使用$emit('update:msg', 'msg改变后的值xxx ...