1. 斐波那契平方和

    ★★☆ 输入文件:fibsqr.in 输出文件:fibsqr.out 简单对比

    时间限制:0.5 s 内存限制:128 MB

    【题目描述】

    ,对 1000000007 取模。F0=0,F1=1,F2=1

    【输入格式】

    一行一个整数 N

    【输出格式】

    一行一个整数 Ans

    【样例输入】

    4

    【样例输出】

    15

    【数据范围】

    1≤ N ≤1015
/*
矩阵乘法.
n
定理:∑f[i]^2=f[n]*f[n+1].
i=1
Codevs3969的n<=10^50000直接弃疗了.
(20W遍快速幂 字符串处理是O(L)的然后就T了。。。
这个定理证明的话就是网上那个著名的
与斐波那契相关的图.
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define mod 1000000007
#define LL long long
using namespace std;
char ch[50010];
int n[50010];
LL ans[3][3],b[3][3],c[3][3],tot,l;
bool check()
{
for(int i=1;i<=l;i++) if(n[i]) return true;
return false;
}
void Div()
{
for(int i=l;i>=1;i--)
{
n[i-1]+=10*(n[i]%2);
n[i]/=2;
}
while(!n[l]) l--;
}
void mi()
{
while(check())
{
if(n[1]&1)
{
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
c[i][j]=(c[i][j]+ans[i][k]*b[k][j]%mod)%mod;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
ans[i][j]=c[i][j],c[i][j]=0;
}
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
for(int k=1;k<=2;k++)
c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
b[i][j]=c[i][j],c[i][j]=0;
Div();
}
}
void slove()
{
ans[1][1]=1,ans[1][2]=0;
b[1][1]=b[1][2]=b[2][1]=1;
mi();
tot=(ans[1][1]%mod*ans[1][2]%mod)%mod;
}
int main()
{
freopen("fibsqr.in","r",stdin);
freopen("fibsqr.out","w",stdout);
cin>>ch+1;l=strlen(ch+1);
for(int i=1;i<=l;i++) n[i]=ch[l-i+1]-48;
slove();
cout<<tot;
return 0;
}

Cogs 1708. 斐波那契平方和(矩阵乘法)的更多相关文章

  1. 斐波那契数列 矩阵乘法优化DP

    斐波那契数列 矩阵乘法优化DP 求\(f(n) \%1000000007​\),\(n\le 10^{18}​\) 矩阵乘法:\(i\times k\)的矩阵\(A\)乘\(k\times j\)的矩 ...

  2. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  3. P1349 广义斐波那契数列(矩阵乘法)

    题目 P1349 广义斐波那契数列 解析 把普通的矩阵乘法求斐波那契数列改一改,随便一推就出来了 \[\begin{bmatrix}f_2\\f_1 \end{bmatrix}\begin{bmatr ...

  4. Codevs 1574 广义斐波那契数列(矩阵乘法)

    1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如an=p*an-1+q* ...

  5. [codevs]1250斐波那契数列<矩阵乘法&快速幂>

    题目描述 Description 定义:f0=f1=1, fn=fn-1+fn-2(n>=2).{fi}称为Fibonacci数列. 输入n,求fn mod q.其中1<=q<=30 ...

  6. 牛客练习赛63 牛牛的斐波那契字符串 矩阵乘法 KMP

    LINK:牛牛的斐波那契字符串 虽然sb的事实没有改变 但是 也不会改变. 赛时 看了E和F题 都不咋会写 所以弃疗了. 中午又看了一遍F 发现很水 差分了一下就过了. 这是下午和古队长讨论+看题解的 ...

  7. 4.17 斐波那契数列 K维斐波那契数列 矩阵乘法 构造

    一道矩阵乘法的神题 早上的时候我开挂了 想了2h想出来了. 关于这道题我推了很多矩阵 最终推出两个核心矩阵 发现这两个矩阵放在一起做快速幂就行了. 当k==1时 显然的矩阵乘法 多开一个位置维护前缀和 ...

  8. poj3070 (斐波那契,矩阵快速幂)

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9630   Accepted: 6839 Descrip ...

  9. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

随机推荐

  1. egit报错:cannot open git-upload-pack

    第一次通过eclipse导入github 项目,按照百度步骤进行操作,发现不能连接 github,cannot open git-upload-pack. 报错原因通过 eclipse 日志排查报错 ...

  2. C# vb .net实现对比度调整特效滤镜效果

    在.net中,如何简单快捷地实现Photoshop滤镜组中的对比度效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...

  3. bootstrap 模态

    <script type="text/javascript" src="js/jquery-ui-custom.min.js"></scrip ...

  4. python3--说简单也不简单的排序算法

    在刚开始接触算法时,我们可能一脸懵,不知从何处下手,尤其是现在使用的语言五花八门,各种语言的实现又不尽相同,所以,在这种情况下,千万不能迷失了自己,掌握了算法的原理,就像解数学公式一样,定理给你了,仔 ...

  5. ADO.NET 五(DataAdapter 与 DataSet)

    在执行对表中数据的查询时还能将数据保存到 DataSet 中,但需要借助 DataAdapter 类来实现. 在实际应用中,DataAdapter 与 DataSet 是在查询操作中使用最多的类. 此 ...

  6. 兴奋与沮丧并存spider爬取拉勾网

    兴奋的开发除了爬取拉勾网的爬虫信息,可是当调试都成功了的那一刻,我被拉钩封IP了. 下面是spider的主要内容 import reimport scrapy from bs4 import Beau ...

  7. 配置APP的图标

    https://www.cnblogs.com/hupo376787/p/10290840.html 上一篇文章说到  Flutter - 自动生成Android & iOS图标 通过flut ...

  8. 【转载】C#中List集合使用Reverse方法对集合中的元素进行倒序反转

    在C#的List集合操作中,有时候需要对List集合中的元素的顺序进行倒序反转操作,此时就可使用到List集合中的Reverse方法来实现此功能,Reverse方法的签名为void Reverse() ...

  9. javascript设计模式之适配器模式

    ---恢复内容开始--- 定义: 是指讲一个接口转换成客户端希望 的另外一个接口,该模式使得原本不兼容的类可以一起工作.适配器模式的作用事解决两个软件实体间的接口不兼容的问题. 生活中的实例: USB ...

  10. 4.kafka API producer

    1.Producer流程首先构建待发送的消息对象ProducerRecord,然后调用KafkaProducer.send方法进行发送.KafkaProducer接收到消息后首先对其进行序列化,然后结 ...