• 题目大意:a[1]=a[2]=a[3]=1,且a[x]=a[x-3]+a[x-1] (x>3),求a数列的第n项对1000000007(10^9+7)取余的值。

  • 思路:显然,直接乘与开数组是无法通过该题的。于是,我们想到了矩阵乘法与快速幂。开一个数组a[4]={0,1,1,1},转移矩阵为{{0,0,1},{1,0,0},{0,1,1}},经过n-3次幂后再与a相乘,这样a[3]就是所求的答案。在实际编写程序时,可以记初始矩阵为所构造的矩阵,然后进行n-4次幂。边计算边取模即可。但是我写的递归版的快速幂无法通过,所以只好又写了非递归版。

  • 代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long martix[4][4]={{0,0,0,0},{0,0,0,1},{0,1,0,0},{0,0,1,1}};
const long long mod=1000000007;
const long long pre[4]={0,1,1,1};
struct node
{long long a[4][4];
};
long long t,n;node calcu(node x,node y)
{node tmp;memset(tmp.a,0,sizeof(tmp.a));for (long long i=1;i<=3;++i)for (long long j=1;j<=3;++j){for (long long k=1;k<=3;++k)tmp.a[i][j]=(tmp.a[i][j]%mod+(long long)(x.a[i][k]*y.a[k][j]%mod))%mod;}return tmp;
}node work()
{  node ans,cnt;memcpy(ans.a,martix,sizeof(ans.a));memcpy(cnt.a,martix,sizeof(cnt.a));n-=4;while(n>0)                               {  if(n&1)  {  ans=calcu(ans,cnt);  }  n>>=1;  cnt=calcu(cnt,cnt);  }  long long m=0;m=(ans.a[1][3]+ans.a[2][3]+ans.a[3][3])%mod;printf("%lld\n",m);
}void init()
{scanf("%lld",&t);while (t--){scanf("%lld",&n);work();}
}int main()
{freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);init();return 0;
}

Codevs3332 数列相关推荐

  1. java 斐波拉_Java实现斐波那契数列

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...

  2. 剑指offer:面试题10- I. 斐波那契数列

    写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 ...

  3. [NOI2005]维护数列

    输入格式 输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目. 第 2 行包含 N 个数字,描述初始时的数列. 以下 M 行,每行一条命令,格式参见问题 ...

  4. 【BZOJ4282】慎二的随机数列 乱搞

    [BZOJ4282]慎二的随机数列 Description 间桐慎二是间桐家著名的废柴,有一天,他在学校随机了一组随机数列, 准备使用他那强大的人工智能求出其最长上升子序列,但是天有不测风云,人有旦夕 ...

  5. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  6. 循环斐波那契数列_剑指offer #10 斐波那契数列

    (递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...

  7. 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

    自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...

  8. 算法(1)斐波那契数列

    1.0 问题描述 实现斐波那契数列,求第N项的值 2.0 问题分析 斐波那契数列最简单的方法是使用递归,递归和查表法同时使用,可以降低复杂度. 根据数列特点,同时进行计算的数值其实只有3个,所以可以使 ...

  9. NOIP模拟题 斐波那契数列

    题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项. 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先 ...

  10. C# 最快的逐一打印斐波那契结果数列的算法

    用这种方法就无需将数列中的每一个元素都计算一遍了! 说多无谓,直接上代码吧! private void button5_Click(object sender, EventArgs e) { FiBo ...

最新文章

  1. c 中ajax不起作用,Jquery AJAX調用:$(this)在成功后不起作用
  2. 案例:文件下载需求:1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载||中文文件问题
  3. eclipse 项目 无法 rename
  4. Spring boot的properties文件编码设置
  5. Spring之Bean的配置(二)
  6. __declspec(selectany)的作用
  7. 生产者与消费者案例-虚假唤醒
  8. 中运算符百分号作用_SQL基础知识——LIKE运算符
  9. 2020 ICPC 济南 F. Gcd Product
  10. 腐蚀rust研究台抽奖_中石化青岛安工院专家分享延迟焦化装置的腐蚀风险分析!...
  11. python去重复记录_python如何处理重复值数据?
  12. Activity的传递数据与实例
  13. Android Service(一)概述、作用、生命周期
  14. 计算机视觉实战(七)图像金字塔与轮廓检测
  15. 腾讯x5内核(TBS)简单集成封装
  16. windows7系统安装,Ultimate(旗舰版)
  17. 移动端touch触屏滑动事件、滑动触屏事件监听!
  18. 七十三、java版商城之买家端商品详情Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
  19. 零基础学平面设计怎么掌握好基础
  20. 【threejs开发随笔】three.js基于八叉树的碰撞检测

热门文章

  1. jquery ajax 回调函数里面再执行ajax函数,jQuery AJAX 和其回调函数
  2. 参考文献引用详细教程
  3. 【英文演讲】(运动的重要性)Importance of Sports
  4. google三篇重要论文(英文原文)
  5. 不用管别人怎么评论自己_不要管别人怎样评价你,做好自己就行了
  6. 时间一天天过去,好像什么都没变。
  7. 使用R语言进行单(双)因素方差分析
  8. react 最佳入门_详解React-Todos入门例子
  9. mac电脑如何设置开机启动项
  10. php怎么启动服务,如何打开php服务