社区讨论

两个样例都没过却A了,qz

P1962斐波那契数列参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lyvmmi7p
此快照首次捕获于
2024/07/21 22:01
2 年前
此快照最后确认于
2024/07/22 08:10
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define MAXN 3
const int mod = 1000000007;
using namespace std;
long long n, L = 2;
struct Matrix {
	long long M[MAXN][MAXN];
	void clear() {
		memset(M, 0, sizeof(M));
	}
	Matrix friend operator *(const Matrix &A, const Matrix &B) {
		Matrix Ans;
		Ans.clear();
		for (int i = 0; i < L; i++) 
			for (int j = 0; j < L; j++)
				for (int k = 0; k < L; k++)
					Ans.M[i][j] = (Ans.M[i][j] + A.M[i][k] * B.M[k][j]) % mod;
		return Ans;
	}
} A;
Matrix expow(Matrix T, long long P) {
	Matrix Ans;
	Ans.M[0][0] = Ans.M[1][1] = 1;
	while (P) {
		if (P & 1)
			Ans = Ans * T;
		T = T * T;
		P >>= 1;
	}
	return Ans;
}
int main() {
	cin >> n;
	if (n <= 2) {
		cout << 1; return 0;
	}
	A.M[0][0] = 1; A.M[0][1] = 1; 
	A.M[1][0] = 1; A.M[1][1] = 0; 
	A = expow(A, n - 2);
	cout << (A.M[0][0] + A.M[0][1]) % mod;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...