快速幂(Quick_pow)模板

该篇博客详细介绍了快速幂算法(Fast Power)的实现,用于高效计算大数乘方。通过位运算技巧,将指数的二进制表示与乘法结合,大大减少了计算复杂度。代码中展示了如何用C++实现这一算法,并在模意义下进行计算,避免溢出问题。
long long fastPower(long long base, long long power) {
    long long ans = 1;
    while (power > 0) {
        if (power & 1) {
            ans = ans * base % mod;
        }
        power >>= 1;
        base = (base * base) % mod;
    }
    return ans;
}

B. Fibonacci 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 在斐波那契数列中,。 给定整数 ,求 。 输入格式 输入包含多组测试用例。 每个测试用例占一行,包含一个整数 。 当输入用例 时,表示输入终止,且该用例无需处理。 输出格式 每个测试用例输出一个整数表示结果。 每个结果占一行。 样例 样例输入 0 9 999999999 1000000000 -1 样例输出 0 34 626 6875 数据范围与提示 模板如下,请修改 #include <bits/stdc++.h> using namespace std; using ll = long long; const int MOD = 1e9 + 7; const int N = 5; struct Matrix { int n; int mat[N][N]; Matrix(int _n = 0) : n(_n) { memset(mat, 0, sizeof(mat)); } void E() { for (int i = 1; i <= n; i++) mat[i][i] = 1; } }; Matrix A(3), init(3); void pre() { A.mat[1][1] = 1; A.mat[1][3] = 1; A.mat[2][1] = 1; A.mat[3][2] = 1; init.mat[1][1] = 1; init.mat[2][1] = 1; init.mat[3][1] = 1; } Matrix mul(Matrix a, Matrix b) { int n = a.n; Matrix ret(n); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { ret.mat[i][j] = (ret.mat[i][j] + 1ll * a.mat[i][k] * b.mat[k][j]) % MOD; } } } return ret; } Matrix quick_pow(Matrix x, ll p) { int n = x.n; Matrix ret(n); ret.E(); while (p) { if (p & 1) ret = mul(ret, x); x = mul(x, x); p >>= 1; } return ret; } void solve(int n) { if (n <= 3) { cout << "1\n"; return; } Matrix ret = quick_pow(A, n - 3); Matrix ans = mul(ret, init); cout << ans.mat[1][1] << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; pre(); while (T--) { int n; cin >> n; solve(n); } return 0; }
最新发布
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值