#include <stdio.h>
#include <string.h>
int main()
{
int a,b,n;
int i;
int f[]={};
f[]=;
f[]=;
while(scanf("%d %d %d",&a,&b,&n)!=EOF){
if(a==){
break;
}
for(i=;i<;i++){
f[i]=(a*f[i-]+b*f[i-])%;
}
if(n<=){
printf("%d\n",f[n-]);
}
else{
printf("%d\n",f[(n-)%+]);
}
}
return ;
}

因为n可能比较大,它决定了递归的层数,所以不能够用递归了,因为栈可能容不下这么大。

否则用递归是一件很轻松的事。

那么得寻找规律:

每个f(n)的结果与f(n-1)和f(n-2)有关

而f(n-1)只可能是0~6其中的一个,所以共7种(除了f(1)和f(2))

而f(n-2)也是0~6其中的一个,也共7种(除了f(1)和f(2))

那么f(n)的结果也只会是0~6之间的一个数

按照a和b的大小,每个f(n)的结果都是[(a倍0~6)+(b倍0~6)]%7

设x=f(n-1)和y=f(n-2),那么可能出现的组合有:
(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6)
(6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6)

以数组a[100]来测试,a[0]=1,a[1]=1,以下是100个数的后48*2个,即a[4]~a[99],其中a[4]~a[51]为一个周期,a[52]~a[99]可以看出又是另一个周期。(自己测试前100个即可)

总结:

以代码中的f[100]这个数组来讲,f[0]~f[3]是没规律的,如果给这几个数,直接输出即可。

f[4]~f[51]是第一个周期内的所有数据,共48个。f[52]~[99]、f[100]~f[147].....类推下去

如果n<=52那么直接输出就行了,如果大于52,那么就要对应到f[4]~f[51]中的一个数了。

HDU 1005 Number Sequence(AC代码)的更多相关文章

  1. HDU 1005 Number Sequence(数列)

    HDU 1005 Number Sequence(数列) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...

  2. HDU 1005 Number Sequence(数论)

    HDU 1005 Number Sequence(数论) Problem Description: A number sequence is defined as follows:f(1) = 1, ...

  3. HDU - 1005 Number Sequence 矩阵快速幂

    HDU - 1005 Number Sequence Problem Description A number sequence is defined as follows:f(1) = 1, f(2 ...

  4. HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. HDU 1005 Number Sequence (模拟)

    题目链接 Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f( ...

  6. HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. HDU 1005 Number Sequence(矩阵快速幂,快速幂模板)

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  8. HDU - 1005 -Number Sequence(矩阵快速幂系数变式)

    A number sequence is defined as follows:  f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...

  9. HDU 1005 Number Sequence

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. hdu 1005:Number Sequence(水题)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

随机推荐

  1. css改变图片的颜色

    参考大神张鑫旭:http://www.zhangxinxu.com/wordpress/2016/06/png-icon-change-color-by-css/ 主要知识点:border-right ...

  2. linux shell 单引号 双引号 反引号的区别

    一.单引号和双引号 首先, 单引号和双引号,都是为了解决中间有空格的问题. 因为空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行就会报错.为 ...

  3. git 将本地项目添加到远程

    git init git add README.md git commit -m "first commit" git remote add origin git@github.c ...

  4. linux常用的重要的命令: netstat

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Membershi ...

  5. 转: JSP中include指令和include动作的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如果 ...

  6. POJ 3648 2-sat

    题目大意: 有一对新人结婚,邀请n对夫妇去参加婚礼. 有一张很长的桌子,人只能坐在桌子的两边,还要满 足下面的要求:1.每对夫妇不能坐在同一侧 2.n对夫妇 之中可能有通奸关系(包括男男,男女,女女) ...

  7. Spring学习笔记之初始化和销毁方法的调用次序

    Multiple lifecycle mechanisms configured for the same bean, with different initialization methods, a ...

  8. Java Bad version number in .class file

    错误信息: java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLo ...

  9. 【参考文献1】Word2010删除引用参考文献留下的横线

    那个莫名其妙不能选中,相信你也遇到.如果是这样,可能那个是尾注分隔符.你可以按照本文的方法解决.当然啦,这个也是按照网上的方法整理参考文献会留下的直线 Office Word2010 方法/步骤   ...

  10. 微软.NET Framework 4.5.2 RTM正式版

    今天,微软.NET开发团队发布.NET Framework 4.5.2 RTM正式版.新版框架继续高度兼容现有的.NET Framework 4.4.5.4.5.1等版本,该版本框架与旧版的.NET ...