终于到达考场的小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这个题用矩阵快速幂????我真不知道。可能K过大需要用把。
我们来看K最大是1e6,我们可以开下1e6的数组来打表记录。注意炸int即可。
我们需要知道 (a+b)%i=a%i+b%i。我们需要对计算里面的每一项进行取模,防止炸Int.
#include<bits/stdc++.h> using namespace std; long long int a[1000003]; int main() { //freopen("C://input.txt","r",stdin); int k; cin >> k; a[1]=a[2]=1; if(k<=2) { printf("%d\n",a[k]); } else { for(int i=3;i<=k;i++) { a[i]=((a[i-2]*a[i-2])%i+(a[i-1]*(i-1))%i)%i; } } printf("%lld\n",a[k]); } /************************************************************** Problem: 1525 User: 1610101013 Language: C++ Result: 正确 Time:62 ms Memory:9464 kb ****************************************************************/