蓝桥杯数论总结:快速幂和矩阵快速幂

news/2024/11/8 7:27:57/

本文先是给出快速幂的原理,又由一道例题明确快速幂的Python代码模版;而后给出矩阵快速幂的原理(介绍了矩阵相乘,对没学过线代者友好),和矩阵快速幂的模版。再给出快速幂和矩阵快速幂相关的题单。

目录

快速幂原理

快速幂Python代码模版

蓝桥oj1514:快速幂

题目描述

输入描述

输出描述

输入输出样例

 求解

矩阵快速幂原理

矩阵相乘

蓝桥oj1550:矩阵相乘

题目描述

输入描述

输出描述

输入输出样例

 求解

矩阵快速幂

矩阵快速幂Python代码模版

题单


快速幂原理

对于一个正整数a,给定正整数n,计算a^n的复杂度是O(n)

如果把n用二进制进行编码,可降低复杂度为O(\log n)

比如当n=5时,二进制编码为101,只需做三次循环。用ans存取a^5的值,初始赋值为1。变量temp初始值赋值为a,每个循环中ans*=temp,循环末尾就把temp*=a。

快速幂Python代码模版

通过一道模版题给出。

蓝桥oj1514:快速幂

题目描述

输入 b,p,k 的值,求 b^(p)modk 的值。其中2≤b,p,k≤10^9 。

输入描述

三个整数 b,p,k。

输出描述

输出  b^(p)modk=s,s 为运算结果。

输入输出样例

示例

输入

2 10 9

输出

7

 求解

把n看成二进制,逐个处理末尾的一项。

另外,根据取模的性质有a^{n}\mod m=(a\mod m)^n

def fast_pow(a,n,mod):ans=1while n:if(n&1):ans=ans*a%moda=a*a%modn>>=1return ansb,p,k=map(int,input().split())
print(fast_pow(b,p,k))

矩阵快速幂原理

矩阵相乘

矩阵相乘C=AB:

C[i,j]=\sum_{k=1}^{n}A[i][k]B[k][j]

要求A的列数等于B的行数。下面给出一道例题。

蓝桥oj1550:矩阵相乘

题目描述

小明最近刚刚学习了矩阵乘法,但是他计算的速度太慢,于是他希望你能帮他写一个矩阵乘法的运算器。

输入描述

输入的第一行包含三个正整数N,M,K,表示一个 NM的矩阵乘以一个MK的矩阵。接下来N行,每行M个整数,表示第一个矩阵。再接下来的M行,每行K个整数,表示第二个矩阵。

0<N,M,K≤100,0≤ 矩阵中的每个数 ≤1000。

输出描述

输出有 N 行,每行 K 个整数,表示矩阵乘法的结果。

输入输出样例

示例

输入

2 1 3
1
2
1 2 3

输出

1 2 3
2 4 6

 求解

n,m,k=map(int,input().split())
A=[]
B=[]
C=[[0]*k for i in range(n)]
for i in range(n): A.append(list(map(int,input().split())))
for i in range(m): B.append(list(map(int,input().split())))
for i in range(n):for j in range(m):for l in range(k): C[i][l]+=A[i][j]*B[j][l]
for i in range(n):for j in range(k): print(C[i][j],end=" ")print()

矩阵快速幂

若矩阵A是N*N的方阵,它可以自乘,把n个A相乘记A^{n}

矩阵快速幂的时间复杂度:O(N^3\log n)

矩阵快速幂Python代码模版

代码逻辑基本与快速幂一样,n%2与n&1等价。只是多了矩阵相乘的函数,以及ans初始化为单位对角阵而已。

def multi(A,B):m1,n1=len(A),len(A[0])m2,n2=len(B),len(B[0])if n1!=m2:return NoneC=[[0]*n2 for i in range(m1)]for i in range(m1):for k in range(n1):for j in range(n2):C[i][j]+=A[i][k]*B[k][j]return Cdef power(A,n):N=len(A)ans=[[0]*N for i in range(N)]for i in range(N):ans[i][i]=1while n:if n%2:ans=multi(ans,A)A=multi(A,A)n//=2return ans

题单

1551:方阵幂次(纯纯模版题)

132:垒骰子

1552:新型斐波那契数列

933:迷路

98:包子凑数


http://www.ppmy.cn/news/128546.html

相关文章

WePY小程序框架实践指南

在小程序开发中&#xff0c;提高开发效率、优化代码质量和增强用户体验是每位开发者都追求的目标。 下面我们从小程序开发框架来讲讲如何帮助开发提效&#xff0c;其中 WePY 是一个稍微冷门一些的开发框架&#xff0c;基于 Vue.js 的小程序开发的框架&#xff0c;提供了更好的…

Windows 7 一键恢复 - 联想拯救系统

Windows 7 一键恢复 - 联想拯救系统 1. 联想拯救系统 1.1 OEM 分区 计算机 -> 管理 -> 存储 -> 磁盘管理 1.2 一键恢复 重新启动电脑 F11 -> 从初始备份恢复 References https://yongqiang.blog.csdn.net/

python htmltestrunner报告_Python3之HTMLTestRunner测试报告美化

|162 | |163 | HEADING |164 | ---------------- |165 | | | |166 | ---------------- |167 | |168 | REPORT |169 | ---------------- |170 | | | |171 | ---------------- |172 | |173 | ENDING |174 | ---------------- |175 | | | |176 | ---------------- |177 | |178 |

水位尺读数识别 python_一种基于深度学习的水尺识别方法与流程

本发明涉及水位监测 技术领域&#xff1a; &#xff1a;&#xff0c;具体地说&#xff0c;涉及一种基于深度学习的水尺识别方法。 背景技术&#xff1a; &#xff1a;&#xff1a;近些年来&#xff0c;随着图像处理技术的发展&#xff0c;通过计算机获得图像里的详细信息成为了…

转 安装EBS前期检查工具 - RDA - Health Check / Validation Engine Guide

http://blog.itpub.net/35489/viewspace-1295028/ 参考文档 RDA - Health Check / Validation Engine Guide (文档 ID 250262.1) 先下载 RDA 补丁包。 Download HCVE/RDA 安装RDA : Example: tar xvf rda.tar or gunzip rda.tar.gz tar xvf rda.tar or unzip rda.zi…

联想台式计算机光驱启动,联想台式机怎么样设置光盘启动

篇一:联想台式电脑如何设置U盘启动 上回我们有说过关于联想笔记本电脑如何设置U盘启动的具体方法步骤,那么联想台式又该如何设置呢?现在很多台式电脑都比较老旧,经常会出现问题,如果要重装系统的话还是用时下流行的U盘装系统方法最为简便安全。今天就让小编来跟大家一起来…

pdu报头内容_MAC-e PDU构造和解析方法_2008100092879_权利要求书_专利查询_专利网_钻瓜专利网...

1.一种MAC-e PDU构造方法&#xff0c;其特征在于&#xff0c;在MAC-e PDU的报头首部构造DDI指示域&#xff0c;在填充MAC-e PDU的报头和负载过程中&#xff0c;累计MAC-ePDU报头中DDI出现的次数并将该次数记录于该DDI指示域。 2.如权利要求1所述的MAC-e PDU构造方法&#xff0c…

lxml和JsonPath的使用案例

python中lxml的使用案例 首先是某一网页的html文件&#xff1a; <!DOCTYPE html> <html> <head><meta http-equiv"content-type" content"text/html; charsetutf-8"><meta name"referrer" content"always&quo…