博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jzoj4627 斐波那契数列
阅读量:4452 次
发布时间:2019-06-07

本文共 642 字,大约阅读时间需要 2 分钟。

题意:求Fib(n)

此题渗水,这里讲一种不用矩阵的方法

令f[n]=Fib(n)

我们假设k=n/2

那么久有以下递推式:

若n-k%2=1

f[n]=f[k]*f[k]+f[k+1]*f[k+1]

否则

f[n]=f[k]*f[k+1]+f[k+1]*(f[k]+f[k+1])

边界特判一下就好了,复杂度lg n

#include
#define L long longL n,N;void Fib(L x,L& a,L& b){ if(x<5) {a=b=1ll;return;} if(x<7) {a=2ll;b=1ll;return;} L i,j,k=x/2; Fib(x-k,i,j); if((x-k)&1){a=(i*i+j*j)%N;b=(i*j+j*(i-j))%N;} else {a=((i+j)*i+i*j)%N;b=(i*i+j*j)%N;}}inline L ans(L x){ if(x<3) return 1; L a,b; Fib(x,a,b); if(x&1ll) return (a*a+b*b)%N; else return ((a+b)*a+a*b)%N;}int main(){ scanf("%lld%lld",&n,&N); printf("%lld\n",(N+ans(n+1))%N);}

转载于:https://www.cnblogs.com/Extended-Ash/p/7774372.html

你可能感兴趣的文章
C# 验证识别基类
查看>>
用bat 删除当前文件夹下的某类文件
查看>>
先序遍历和后序遍历构建二叉树
查看>>
linux xorddos样本分析1
查看>>
【数论】-素数问题整理
查看>>
提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder
查看>>
[happyctf]部分writeup
查看>>
HDU 1195 Open the Lock(BFS)
查看>>
Struts2的crud
查看>>
java上传文件
查看>>
大学生对技术网站需求的调查问卷结果分析
查看>>
Pascal程序练习-与7无关的数
查看>>
Linux:cut命令...未完待续
查看>>
react实现svg实线、虚线、方形进度条
查看>>
Web
查看>>
那些容易忽略的事(1) -变量与运算符+
查看>>
九度oj 题目1252:回文子串
查看>>
(十一)tina | openwrt关闭调试串口(DEBUG UART)
查看>>
angularjs 使用angular-sortable-view实现拖拽效果(包括拖动完成后的方法使用)
查看>>
2015生命之旅---南京、南通、上海之行
查看>>