.
.
.
.
.
分析
矩阵快速幂+斐波那契求和公式:
S(n)=2 * a(n)+a(n-1)-1
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long mo=10000,n,a[2][2],ans[2][2],t[2][2];
void jzcf(long long x[2][2],long long y[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]=(((long long)x[i][k]*y[k][j])%mo+t[i][j]+mo)%mo;
for (int i=0;i<=1;i++)
for (int j=0;j<=1;j++)
x[i][j]=t[i][j];
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
long long x,y;
scanf("%lld%lld",&x,&y);
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
a[0][0]=a[0][1]=a[1][0]=1;
a[1][1]=0;
ans[0][0]=ans[1][1]=1;
x--;
while (x)
{
if (x&1) jzcf(ans,a);
jzcf(a,a);
x>>=1;
}
long long sum1=((long long)2*ans[0][1]+ans[1][1]-1+mo)%mo;
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
a[0][0]=a[0][1]=a[1][0]=1;
a[1][1]=0;
ans[0][0]=ans[1][1]=1;
while (y)
{
if (y&1) jzcf(ans,a);
jzcf(a,a);
y>>=1;
}
long long sum=((long long)2*ans[0][1]+ans[1][1]-1-sum1+mo)%mo;
printf("%lld\n",(sum+mo)%mo);
}
return 0;
}