1 条题解
-
0
C++ :
#include<cstdio> #include<iostream> #define K 32767001 using namespace std; long long fib[3]={0,0,1}; long long c[3][3]; int n; void calc(){ long long k1=c[1][1]%K,k2=c[1][2]%K; long long k3=c[2][1]%K,k4=c[2][2]%K; c[1][1]=k1*k1+k2*k3; c[1][2]=k1*k2+k2*k4; c[2][1]=k3*k1+k4*k3; c[2][2]=k3*k2+k4*k4; c[1][1]%=K; c[1][2]%=K; c[2][1]%=K; c[2][2]%=K; } void calct(){ long long f1=fib[1]%K,f2=fib[2]%K; long long k1=c[1][1]%K,k2=c[1][2]%K; long long k3=c[2][1]%K,k4=c[2][2]%K; fib[1]=f1*k1+f2*k3; fib[2]=f1*k2+f2*k4; fib[1]%=K;fib[2]%=K; } int main(){ //freopen("fibonacci.in","r",stdin); //freopen("fibonacci.out","w",stdout); cin>>n; if(n==0){ cout<<0<<endl; return 0; } n--; c[1][1]=0;c[1][2]=1; c[2][1]=1;c[2][2]=1; for(;n;n>>=1,calc()){ if(n&1) calct(); } fib[2]%=K; cout<<fib[2]<<endl; return 0; }
- 1
信息
- ID
- 1214
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者