题意: 输进去一个N,where 0 ≤ n ≤ 1,000,000,000,输出 f[n] 的后四位;
#include<stdio.h>
#include<string.h>
const int mod=10000;
int n;
int quick_mul()
{
if(n==0) return 0;
int a11=1,a12=1,a21=1,a22=0;
int b11,b12,b21;
int ans11=1,ans12=0,ans21=0,ans22=1;
while(n)
{
if(n&1)
{
b11=(ans11*a11+ans12*a12)%mod;
b12=(ans11*a12+ans12*a22)%mod;
ans22=(ans21*a12+ans22*a22)%mod;
ans11=b11;
ans12=b12;
ans21=a12;
}
b11=(a11*a11+a12*a21)%mod;
b12=(a11*a12+a12*a22)%mod;
a22=(a21*a12+a22*a22)%mod;
a11=b11;
a12=b12;
a21=a12;
n>>=1;
}
return ans12;
}
int main()
{
while(~scanf("%d",&n),n!=-1)
{
int ans=quick_mul();
printf("%d\n",ans);
}
}