当前位置: 首页 > news >正文

矩阵快速幂,简单粗暴



快速幂

  1. 数的快速幂;

    计算x^n,n=10000000

    递归算法

    intpow(int x,int n)

    {

        if(n==1)

            return x;

        else if(n%2==1)

        {

            return x*pow(x,n/2);

        }

        else

        {

            return pow(x,n/2);

        }

    }

    非递归算法

     

    intpow(int x,int n)

    {

        int temp=1;

        if(n%2==1)

        {

            temp*=x;

            n-=1;

        }

        while(n)

        {

            x=x*x;

            n/=2;

        }

        return x;

    }

 

  1. 矩阵快速幂

     

    1*.矩阵乘法的实现;

    structasd{

        int a[N][N];

    };

    asdcheng(asd q,asd w,int n)

    {

        asd r;

        int i,j,k;

        for(i=0;i<n;i++)

        {

            for(j=0;j<n;j++)

            {

                r.a[i][j]=0;

                for(k=0;k<n;k++)

                {

                    r.a[i][j]+=q.a[i][k]*w.a[k][j];

                }

            }

        }

        return r;

    }

2*.类比于数的快速幂做出矩阵的快速幂

#include <stdio.h>

#include <string.h>

#define Matr 110 //矩阵大小

struct mat//矩阵结构体

{

    inta[Matr][Matr];

    mat()//构造函数

    {

       memset(a,0,sizeof(a));

    }

};

int Size,mod;

 

mat multi(mat m1,mat m2)//两个相等矩阵的乘法

{

    mat ans=mat();

    for(inti=0;i<Size;i++)

        for(intj=0;j<Size;j++)

            for(intk=0;k<Size;k++)

               ans.a[i][k]=(ans.a[i][k]+m1.a[i][j]*m2.a[j][k])%mod;

    return ans;

}

 

mat quickmulti(mat m,int n)//二分快速幂

{

    mat ans=mat();

    int i;

   for(i=0;i<Size;i++)ans.a[i][i]=1;

    while(n)

    {

       if(n&1)ans=multi(m,ans);

       m=multi(m,m);

       n>>=1;

    }

    return ans;

}

 

void print(mat m)//输出矩阵信息

{

    int i,j;

   printf("%d\n",Size);

   for(i=0;i<Size;i++)

    {

       for(j=0;j<Size;j++)

            printf("%d ",m.a[i][j]);

       printf("\n");

    }

}

int main()

{

 

        int n,p;

        while(~scanf("%d%d",&n,&p))

        {

               matA;

               for(inti=0;i<n;i++)

                   for(int j=0;j<n;j++)

                       scanf("%d",&A.a[i][j]);

               Size=n;

               mod=p;

               A=quickmulti(A,n);

               print(A);

        }

        return 0;

}

-------斐波那契前四位(主要代码),用公式做的————不知道百度

doublet1=log10((double)(1.0+sqrt(5.0))/2);

            double t2=log10(sqrt(5.0));

            double t;

            int ans1;

            t=n*t1-t2;

            t=t-(int)t;

            ans1=pow(10.0,t)*1000;

            printf("%d\n",ans1);

 

 ------矩阵的一些变换

 

转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934594.html

相关文章:

  • Mysql----浅入浅出之视图、存储过程、触发器
  • 当前端也拥有 Server 的能力
  • GridView中使用 jQuery DatePicker (UpdatePanel)
  • 39.Android版本小知识
  • 适合初学者的理解Sphinx运行方式
  • java--- Map详解
  • springMVC-mvc:annotation-driven
  • MyCat源码分析系列之——BufferPool与缓存机制
  • web项目中各种路径的获取
  • hdu 1081 dp问题:最大子矩阵和
  • ssh 命令
  • 0302思考并回答一些问题
  • html怎么添加背景图片
  • python的种类
  • 中国人民大学2016年硕士研究生复试基本要求
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • crontab执行失败的多种原因
  • Median of Two Sorted Arrays
  • spring security oauth2 password授权模式
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 关于Java中分层中遇到的一些问题
  • 利用jquery编写加法运算验证码
  • 全栈开发——Linux
  • 深度学习入门:10门免费线上课程推荐
  • 温故知新之javascript面向对象
  • 新书推荐|Windows黑客编程技术详解
  • 学习ES6 变量的解构赋值
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • Nginx实现动静分离
  • 如何在招聘中考核.NET架构师
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #git 撤消对文件的更改
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (3)选择元素——(17)练习(Exercises)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (poj1.3.2)1791(构造法模拟)
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot教学评价 毕业设计 641310
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net mvc部分视图
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net的DataSet直接与SQL2005交互
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @Service注解让spring找到你的Service bean
  • @SpringBootApplication 包含的三个注解及其含义
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [④ADRV902x]: Digital Filter Configuration(发射端)