1 条题解

  • 0
    @ 2024-12-24 9:54:32

    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
    上传者