1 solutions

  • 0
    @ 2025-11-5 16:06:39

    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

    Information

    ID
    17487
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By