1126 求递推序列的第N项

基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给出A,B和N,求f(n)的值。
Input
输入3个数:A,B,N。数字之间用空格分割。(-10000 <= A, B <= 10000, 1 <= N <= 10^9)
Output
输出f(n)的值。
Input示例
3 -1 5
Output示例
6

问题链接:1126 求递推序列的第N项

问题分析:本题与《HDU1005 Number Sequence【递推序列+模除】》类似,输入的值的范围不同,参见参考链接。

这是一个有关序列与模除的问题,有点像斐波拉契数列,只是第i项是由一个公式计算的,并且使用了模除。

根据数论的知识可知,模7的余数值是0-6。若对于正整数k和m,若f(k-2)=f(m-2)且f(k-1)=f(m-1),则f(k)=f(k-2)+f(k-1)=f(m-2)+f(m-1)=f(m),即如果k和m的前两项完全相同,则f(k)=f(m)。这样的数列,若干项之后,其值会循环出现,所以不必将其所有的项都算出来,只需要算出第一个循环的各个项即可。

因此,只需要构建一个长度为n的短数列,各项的值为定义公式计算出来的7的余数,需要知道的是n为多少。如果f(n+1)=1(f(1)=1)且f(n+2)=1(f(2)=1),那么就得到了所要求的n了。

程序说明:需要取一个合适的N,保证能够出现循环。

题记:(略)

参考链接:HDU1005 Number Sequence【递推序列+模除】

AC的C++程序如下:

#include <iostream>using namespace std;const int MOD = 7;
const int N = 110;
int t[N] = {0, 1, 1};int main()
{int a, b, n, i;while(cin >> a >> b >> n) {if(n == 1 || n == 2) {;} else {for(i=3; i<N; i++) {t[i] = ((a * t[i-1] + b * t[i-2]) % MOD + MOD) % MOD;if(t[i] == 1 && t[i-1] == 1)break;}t[0] = t[i - 2];n %= i - 2;}cout << t[n] << endl;}return 0;
}

51Nod-1126 求递推序列的第N项【递推序列+模除】相关推荐

  1. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释

    题目: 看起来比较难,范围10^9 O(n)都过不了,但是仅仅是看起来.(虽然我WA了7次 TLE了3次,被自己蠢哭) 我们观察到 0 <= f[i] <= 6 就简单了,就像小学初中学的 ...

  2. 【C语言】有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,...求出这个数列的前20项

    本文目录 1. 题目及总体思路 1.1 题目 1.2 总体思路 2. 循环和递归方法 2.1 思路 2.2 循环方法 2.3 递归方法 3. 斐波那契数列法 3.1 思路与求解方法 1. 题目及总体思 ...

  3. ACMNO.12有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。 输入 N 输出 数列前N项和 样例输入 10

    题目描述 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数. 输入 N 输出 数列前N项和 样例输入 10 样例输出 16.48 ...

  4. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

    有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13-求出这个数列的前20项之和. #include<stdio.h> int main() {int n, t;float ...

  5. C语言学习之有一个分数序列2/1、3/2、5/3、8/5、13/8、21/13,……求出这个数列的前20项之和。

    有一个分数序列2/1.3/2.5/3.8/5.13/8.21/13,--求出这个数列的前20项之和. #include <stdio.h> void main(){double a=1,b ...

  6. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前20项之和。...

    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前20项之和. 程序分析:请抓住分子与分母的变化规律. public class 第二十题求数列之和 {p ...

  7. 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。

    这里写自定义目录标题 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 ...

  8. 求N分之一序列的前N项和

    求N分之一序列的前N项和 #include <stdio.h>int main() {int i,n;double sum=0,s=1;scanf("%d",& ...

  9. 有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, …编写程序求出这个序列的前n项之和。

    问题与代码:有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, -编写程序求出这个序列的前n项之和 文件名称:有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, -编写 ...

最新文章

  1. CentOs下卸载程序
  2. Kibana 用户指南(使用Flight仪表盘探索Kibana)
  3. BCH压力测试取得圆满成功,最大区块达21.3MB
  4. CCF - 201509-2 - 日期计算
  5. 李永乐线性代数手写笔记-行列式与矩阵
  6. python getopts_getopts用法
  7. 【机器学习基础】数学推导+纯Python实现机器学习算法18:奇异值分解SVD
  8. java对两个表进行排序_Excel工作簿中多个worksheet工作表,如何对工作表进行排序?...
  9. CKeditor自定义上传图片功能
  10. 【100Days of 100 line Code】3 day
  11. 寻找两个有序数组最小相同元素---JavaScript--解决方法
  12. 啊哈C语言 第8章 游戏时间到了(第29讲)
  13. java Base64带秘钥的加密解密
  14. matlab基于凹点匹配的分割算法,一种基于凹点匹配的重叠图像分割算法
  15. 2014腾讯实习生招聘数组墙算法
  16. java 登录界面加验证码_java 做登陆窗口,带有用户名和密码输入框和验证码。求修改...
  17. AS中signingConfigs配置
  18. MIMIC数据库权限申请
  19. o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
  20. rok 万国觉醒 资源分析 地图资源

热门文章

  1. golang使用http client发起get和post请求示例
  2. 认识HTML5的WebSocket 1
  3. ASP.NET的内置对象介绍
  4. 滇西应用技术大学有没有计算机专业,学校介绍
  5. 带参数的update mysql_mysql参数sql_update 说明
  6. windows运行python脚本卡住_运行python脚本安装windows服务时没有响应
  7. mysql begin rollback_事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句
  8. linux grep跨行文本匹配,grep跨行匹配
  9. 查询jdk支持的 tsl协议版本
  10. java语言构造顺序树_PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列...