文賽 2021-11-23 09:48 采纳率: 0%
浏览 51

要求用矩阵快速幂的方法,使时间复杂度为logn,请问如何递推?系数矩阵应该怎么写呢?C语言

img

  • 写回答

2条回答 默认 最新

  • 真相重于对错 2021-11-23 12:28
    关注

    不要用递归,用递推。
    还有计算 3^n ,数字会越界,大致代码如下

    long long  PowerMod(long long  a, long long  b, int c)
    {
        long long  ans = 1;
        a = a % c;
        while (b > 0) {
            if (b % 2 == 1)
                ans = (ans * a) % c;
            b = b / 2;
            a = (a * a) % c;
        }
        return ans;
    }
    int main()
    {
        unsigned long long f1 = 2, f0 = 1;
        unsigned long long f2 = 0;
        unsigned long long zeta = 0;
        int n;
        cin >> n;
        auto x =3*long long(pow(3, 37));
        for (long long  i = 2; i <= n; i++) {
            zeta = PowerMod(3, i, 100000007);
            f2 = (3 * f1+ 2 * f0 + i*zeta)%100000007;
            f0 = f1%100000007;
            f1 = f2;
       
            
        }
        cout << f2;
    }
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大