【wikioi1250】Fibonacci数列

来源:互联网 发布:网络暴力漫画 编辑:程序博客网 时间:2024/06/06 20:52
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int a[2][2],b[2][2],n,q,_;void mul(int a[2][2],int b[2][2],int ans[2][2],int q){int t[2][2];memset(t,0,sizeof(t));for(int i=0;i<=1;i++)for(int j=0;j<=1;j++)for(int k=0;k<=1;k++)t[i][j]=(t[i][j]+a[i][k]*b[k][j])%q;for(int i=0;i<=1;i++)for(int j=0;j<=1;j++)ans[i][j]=t[i][j];}void init(){a[0][0]=a[0][1]=a[1][0]=b[0][0]=b[1][1]=1;    b[1][0]=b[0][1]=a[1][1]=0;}int main(){scanf("%d",&_);for(int i=1;i<=_;i++){scanf("%d%d",&n,&q);init();n++;while(n){if(n&1)mul(a,b,b,q);n>>=1;mul(a,a,a,q);}printf("%d\n",b[1][0]);}return 0;}

0 0
原创粉丝点击