社区讨论
两个样例都没过却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 条回复,欢迎继续交流。
正在加载回复...