O(logN)时间复杂度内求整数的N次方以及矩阵的N次方
整数N次方
假设一个整数是10,如何最快地求解10的75次方。
1. 75的二进制数形式为1001011
2. 10的75次方=10^64 × 10^8 × 10^2 × 10^1
在这个过程中,我们先求出10^1,然后根据10^2,再根据10^2求出10^4,……,最后根据10^32求出10^64,即75的二进制数形式总共为多少位,我们就要在原基础上平方几次。
- 在步骤2进行的过程中,只有遇到位为1时,才将结果累乘当前的平方数。比如,10^64、10^8、10^2、10^1应该累乘。
/*** 巧算*/static int ex2(int n, int m) {int pingFangShu = n; //n 的 1 次方int result = 1;while (m != 0) {//遇1累乘现在的幂if ((m & 1) != 0)result *= pingFangShu;//每移位一次,幂累乘方一次pingFangShu = pingFangShu * pingFangShu;//右移一位m >>= 1;}return result;}
矩阵乘法
/*** 矩阵乘法* 矩阵1为n*m矩阵,矩阵2为m*p矩阵* 结果为n*p矩阵*/public static long[][] matrixMultiply(long[][] m1, long[][] m2) {final int n = m1.length;final int m = m1[0].length;final int p = m2[0].length;long[][] result = new long[n][p];// 新矩阵的行数为m1的行数,列数为m2的列数for (int i = 0; i < n; i++) {for (int j = 0; j < p; j++) {for (int k = 0; k < m; k++) {result[i][j] += m1[i][k] * m2[k][j];}}}return result;}
矩阵的N次方
求矩阵的N次方,思路和求整数的N次方接近,区别是矩阵乘法和整数乘法在细节上不一样,但对于怎么乘更快,原理上是一致的。
/*** 求矩阵matrix的p次方* @param matrix* @param p* @return*/public static long[][] matrixPower(long[][] matrix, int p) {//初始化结果为单位矩阵,对角线为1long[][] result = new long[matrix.length][matrix[0].length];//单位矩阵,相当于整数的1for (int i = 0; i < result.length; i++) {result[i][i] = 1;}//平方数long[][] pingFang = matrix; // 一次方for (; p != 0; p >>= 1) {if ((p & 1) != 0) { // 当前二进制位最低位为1,将当前平方数乘到结果中result = matrixMultiply(result, pingFang);}//平方数继续上翻pingFang = matrixMultiply(pingFang, pingFang);}return result;}
O(logN)时间复杂度内求整数的N次方以及矩阵的N次方相关推荐
- python计算n的32次方_获得用户输入的一个整数N,计算并输出N的32次方。_学小易找答案...
[多选题]材料的力学性质 [单选题]已知在计算机中存储了"大学计算机基础"这样一串汉字,它们所占用的存储空间为( )二进制位. [单选题]以下不是python的注释方式是( ) [ ...
- 判断 2 的幂次方、3 的幂次方、4 的幂次方
1. 2 的幂次方 给你一个整数 n,请你判断该整数是否是 2 的幂次方.如果是,返回 true :否则,返回 false . 如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂 ...
- 怎么用计算机算20次方,一个数的几次方怎么算,有简便方法吗?比如2的20次方,怎么算快?...
一个数的几次方怎么算,有简便方法吗?比如2的20次方,怎么算快?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一个数的 ...
- java中n次方怎么表示_n次方_word中输入N次方的符号的两种方法
为了打编程题的题目,而题目里面有X²,但我不懂,只好去网上查了,经过我的多方查找,最后总结了一下几种方法.下面一起和学习啦小编来学习一下输入N次方的符号吧,希望对你有帮助! 输入N次方的符号方法一 1 ...
- 计算机根号的3次方怎么,excle 开几次方|excel中咋开3次根号啊
excel几次方怎么设置啊 乘方的符是"^",也可以使用POWER函数. 数学运算符参照如下: POWER 用途:返回给定数字的. 语法:POWER(number,power) 参 ...
- 实例013:所有水仙花数 打印出所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方
实例013:所有水仙花数题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数&q ...
- 51nod 1113 矩阵快速幂 (矩阵的n次方)
给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大,只需要输出每个元素Mod (10^9 + 7)的结果. Input 第1行:2个数N和M,中间用空格分隔. ...
- 2的31次方和3的21次方哪个大,123组成最大的数是多少?
123这三个数字组成最大的数是什么数? 面试官告诉小孙:123这三个数字组成最大的数是什么数?我希望你能够在5分钟之内回答出来. 小孙当时连想都没有想,123组成的最大数字,当然就是123了,当小孙把 ...
- 3的四次方在计算机上怎么求,“x的4次方+y的4次方”这个怎么因式分解?多年以后我依然记...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 "x的4次方+y的4次方"这个怎么因式分解? 多年以后我依然记得那个在算草纸上随意撕下来的纸做成的纸条上的内容.就在我复习后初三的第一 ...
最新文章
- 解决无扬声器(无喇叭)的HDMI接口显示屏声音问题
- 部落卫队pascal解题程序
- 0.5s c语言延时子程序集,用C语言实现精确的延时.doc
- Eclipse使用————Working Set工作集
- 剑指Offer——跳台阶
- 今天面了个腾讯的大佬,让我见识到了基础的天花板!
- 怎样在 Ubuntu 13.04 Raring Ringtail , 12.10, 12.04 中安装和设置 Samba 实现网上邻居共享...
- a+aa+...+aaa..aa表达式输出
- html可以移动的按钮插件,纯css3按钮动画插件
- ios vue 添加本地音乐_vue怎么添加自己的音乐
- 迅捷CAD编辑器中PDF转换CAD的详细步骤
- windows下格式化内存卡
- 使用Python(OCR)收集体温打卡截图,并自动发消息提醒没交的人。
- 零基础学java(6)——面向对象的基本特征
- ps里面怎么插入流程图_Photoshop制作网站流程图详细过程
- 金字塔原理(pgn 项目计划、方案、汇报、总结、PPT等)
- Ubuntu IDEA返回上一次位置快捷键失效问题解决
- Cannot run program‘C:\Anaconda3\envs\...\python.exe’(in directory):CreateProcess error=2,系统找不到指定文件
- 用于考核、评价的投票打分系统解决方案
- angularjs使用lhgdialog做对话框控件