Submission #9683

#TimeUsernameProblemLanguageResultExecution timeMemory
9683maniacPhibonacci (kriii2_P)C++98
1 / 4
0 ms1088 KiB
#include <cstdio>

const long long MOD(1000000007);

typedef struct matrix{
    long long d[2][2];
}Matrix;
 
Matrix F={1, 1, 1, 0};
 
Matrix m_Mul(Matrix A, Matrix B){
    Matrix C;
    C.d[0][0]=(A.d[0][0]*B.d[0][0]+A.d[0][1]*B.d[1][0])%MOD;
    C.d[0][1]=(A.d[0][0]*B.d[1][0]+A.d[0][1]*B.d[1][1])%MOD;
    C.d[1][0]=(A.d[1][0]*B.d[0][0]+A.d[1][1]*B.d[1][0])%MOD;
    C.d[1][1]=(A.d[1][0]*B.d[1][0]+A.d[1][1]*B.d[1][1])%MOD;
    return C;
}
 
Matrix m_Power(Matrix A, long long n){
    if(n>1){
        A=m_Power(A, n/2);
        A=m_Mul(A, A);
        if(n&1)
            A=m_Mul(A, F);
    }
    return A;
}
 
int main(){
    long long n, m;
    scanf("%lld %lld", &n, &m);
	if (n == 0) {
		// phi^0 = 1 = F(0) * phi + F(-1) = 0 * phi + 1
		puts("0 1");
		return 0;
	} else if (n == 1) {
		puts("1 0");
		return 0;
	}
    Matrix A={1, 1, 1, 0}, B={1, 1, 1, 0};
    A=m_Power(A, n-1);
    B=m_Power(B, n);
    printf("%lld %lld\n", B.d[0][1], A.d[0][1]);
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...