HPU 1471:又是斐波那契数列??(大数取模)
1471: 又是斐波那契数列??
时间限制: 1 Sec 内存限制: 128 MB
提交: 278 解决: 27 统计
题目描述
大家都知道斐波那契数列吧?斐波那契数列的定义是这样的: f0 = 0; f1 = 1; fi = fi-1 + fi-2
现在给你一个数x,聪明的你一定知道这是斐波那契数列中的第几项。
(数据保证x一定有对应的项y,且 0 <= y < 1e4)
输入
第一行一个整数T,表示测试组数。
之后的T行,每行一个数x
输出
对于每个测试数据,输出一行表示数x是第几项
样例输入
2
2
5
样例输出
3
5
题意
给出一个数,求是斐波那契里的第几项
思路
一开始想着打表,然后直接查找,但是发现数太大了。然后换了个思路,也是打表,然后每个数对1e9+7取模(取模的数字随便找,不会爆范围就行),然后输入数n,遍历打好的斐波那契表,如果n对表中的某一项取模为0,那么该项就是n在斐波那契中的位置。
注意:输入的数n很大,要用字符串输入,然后利用大数取模来操作。(一开始忘了n的范围,一直拿着打好的表中的数来算,导致了WA9。QAQ,罚时爆炸)。
AC代码
#include<bits/stdc++.h>
#define ll unsigned long long
#define ms(a) memset(a,0,sizeof(a))
#define pi acos(-1.0)
const int mod=1e9+7;
const int maxn=1e4+10;
using namespace std;
char num[maxn];
ll a[maxn];
int l;
int main()
{
int t;
a[0]=0;
a[1]=1;
map<ll,int>mp;
//打好表,用map记录每个数的位置
for(int i=2;i<maxn;i++)
{
a[i]=(a[i-1]%mod+a[i-2]%mod)%mod;
mp[a[i]]=i;
}
scanf("%d",&t);
while(t--)
{
ll n;
ms(num);
scanf("%s",num);
int l=strlen(num);
ll ans=0;
//对输入的超大的斐波那契数取模
for(int i=0;i<l;i++)
{
ans=(ans*10+num[i]-'0')%mod;
}
//输出取模后的数的位置
printf("%d\n",mp[ans]);
}
return 0;
}
HPU 1471:又是斐波那契数列??(大数取模)的更多相关文章
- 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】
链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...
- ACM_无聊者序列(斐波那契数列大数取余(同余)+规律)
Problem Description: 瓜瓜在玩着由红色和蓝色的大理石做成的玻璃珠,他将n个玻璃珠从左到右排成一个序列叫做无聊者序列.一个非空的红色和蓝色玻璃珠组成的序列是一个无聊者序列.这个序列的 ...
- 牛客多校第九场 && ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解
题意1.1: 求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\) 思路1.1 我们首先需要知道斐波那契数列的通项是:\(F ...
- hihoCoder #1143 : 骨牌覆盖问题·一 (斐波那契数列)
题意:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢? 思路:这是斐波那契数列啊,f[n] = f[n-1] + f[n-2],初始时 f[ ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
随机推荐
- 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)
// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...
- Codeforces 862B - Mahmoud and Ehab and the bipartiteness
862B - Mahmoud and Ehab and the bipartiteness 思路:先染色,然后找一种颜色dfs遍历每一个点求答案. 代码: #include<bits/stdc+ ...
- Oracle数据库system用户忘记了密码怎么办
1.在运行里面输入cmd调出dos窗口,然后在dos窗口中输入sqlplus /nolog 如:D:\oracle\ora92\bin>sqlplus /nolog 2.输入连接命令 如:SQL ...
- English trip -- VC(情景课)4 A Health
Word doctor doctor's office medicine [ˈmɛdɪsɪn] n. 药:医学:内科:巫术 vt. 用药物治疗:给…用药 pill n. 药丸 nurse ...
- (GoRails )使用Vue.js制作拖拉list功能(v1-4) gem 'acts_as_list'(自动排列顺序)
系列视频: use Vue.js to build the drag and drop support for the list themselves the cards that are under ...
- Vue.js教程--基础2(事件处理 表单输入绑定
事件处理 表单输入绑定 事件处理 监听v-on 监听 DOM 事件,并在触发时运行一些 JavaScript 代码. 可以在v-on:click=''加内联语句. 有时也需要在内联语句处理器中访问原始 ...
- 在Eclipse中Attach Source
在Eclipse中,有时需要查看类.方法和变量的声明和定义的源代码. 但是在F3查看一些在JDK库中声明/定义的类.方法和 变量的源代码时,Eclipse给你打开的却是相应的.class文件(byte ...
- quartz---(1)
Quartz Quartz是什么? 简单的一些例子 Quartz是什么 简单的认为Quartz是是一个定时器. 1.1. 下载 http://www.quartz-scheduler.org/down ...
- Animation鱼眼效果
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- 开源软件架构总结之——Asterisk(DSL、组件、多线程)
Asterisk 1是基于GPLv2协议发布的一款开源电话应用平台.简单地说,这是一个服务端程序,用于处理电话的拨出.接入以及自定义流程. 一个人使用电话A呼叫另一个使用电话B的人.在此场景下,连接到 ...