问题 I: 小P找座位
时间限制: 1 Sec 内存限制: 128 MB
提交: 1 解决: 1
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
终于到达考场的小P忘了自己坐在那里了,但他想起自己的座位号是第K个bofinacci数
马上就要考试了,请你帮助他求出他的座位号
设bi表示第i个bofinacci数,则b1=b2=1,对于i≥3有bi=(b2i−2+bi−1∗(i−1))%i
输入
一个整数K (K≤1000000)
输出
一个整数表示小P的座位号
样例输入 Copy
3
样例输出 Copy
0
思路
对于这个题服了,应该是我太菜了,第一次提交错了就算了,我以为是递推退错了,后来修改一下,还不行。
最后想想应该是int太小了把类型改为 long long 就行了。
代码
#include<cstdio>
using namespace std;
typedef long long ll;
int main(){
ll k;
scanf("%lld", &k);
ll b1 = 1, b2 =1;
ll b3 = 0;
if(k == 1 || k == 2){
printf("1\n");
return 0;
}
for (ll i = 3; i <= k; i++){
b3 = (b1*b1 + b2*(i-1))%i;
b1 = b2;
b2 = b3;
}
printf("%lld\n",b3);
return 0;
}