| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 964 人关注过本帖
标题:大一斐波那契数题目 求助
只看楼主 加入收藏
路过打XO的
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-12-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
大一斐波那契数题目 求助
题目求fib(fib(n))%mod,fib(1)=1,fib(2)=2
输入两个整数n(0<n<1e4)和mod(0<mod<1000)
如果是单纯是求fib(n)%mod 利用理论依据:(n+m)%c=[(n%c)+(m%c)]则不用担心n有多大的问题,代码如下
int shen(int n,int mod)
{int N=15000;
 int a[N];
 int i;
 a[0]=1;a[1]=2;
 for(i=2;i<N;i++)
 {a[i]=(a[i-1]+a[i-2])%mod;
 }
 return a[(n-1)%N];
}
 但里面是个fib(n),当n=10000时fib(n)数位上千,fib(n)怎么处理才可以再进行下去?
2016-12-24 14:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
因为mod小于1000,所以 任何数%mod 最多只有1000种结果
找出循环开始点,和循环体长度,然后就是查表了
2016-12-24 16:54
路过打XO的
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-12-24
收藏
得分:0 
回复 2楼 rjsp
但是里面还有个fib(n),而且fib(n)太大。根据前面的理论已经弄了一个函数出来,但由于里面fib(n)数据太大,输入不了

[此贴子已经被作者于2016-12-24 20:30编辑过]

2016-12-24 20:21
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 3楼 路过打XO的
计算fib(n)的最后三位数就行了~因为%1000,顶多1000个循环节,把循环节找出来,再看看fib(n)最后的三位数对应的是循环节的哪个部分就可以了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-24 20:30
路过打XO的
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-12-24
收藏
得分:0 
回复 4楼 九转星河
题目求fib(fib(n))%mod,最外面的fib(a)%mod可以,但是a=fib(n),这个a太大了,是a太大。。大到我无法处理,a上千位
2016-12-24 20:41
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
回复 5楼 路过打XO的
哦哦,忘记告诉可以用数组保存每一个循环节的数据了~每个数组元素保留最后三位,直到有重复数出现为止(对了,这里还涉及到查重问题,可以另外建立个状态记录表,一开始全部清0,点到的数状态变量变为1)~每个数组保留 1 1 2 3 5 7……这样,直到下一次出现重复的数据~知道fbi的循环节以内的数据,就可以通过n%循环节来计算了~

看看有没有时间去敲敲代码~虽然很可能没有时间去完成这等功夫~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-24 22:08
路过打XO的
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-12-24
收藏
得分:0 
回复 6楼 九转星河
确实是利用循环节化简,已经解决了 谢谢

[此贴子已经被作者于2016-12-25 03:02编辑过]

2016-12-25 00:20
快速回复:大一斐波那契数题目 求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087050 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved