基于C/C++实现大指数幂的计算
目录
源代码
解析代码(比如计算 3^19)
其中涉及到的知识点
按位与 &
移位运算 [ 右移(>>)为例 ]
源代码
long long ksm(long long a, long long k) // a代表底数,k代表指数
{long long res = 1;while (k){if (k & 1)res *= a;k >>= 1;a *= a;}return res;
}
解析代码(比如计算 3^19)
先将3^19如此转换
设最终结果:res=1,底数:a,指数:k(下表为二进制形式)(k==0时结束循环)
中间五个表达式都为相乘关系
空白:表示与上方的单元格内容一样
处理1:将X^2^0计算出来并乘上 res,若是 X^(0*2^0) 的格式,则直接跳过,因为值为1,乘不乘都可以(if (k&1) res *= a; )
处理2:将指数提一个2出来(k >>= 1)(此操作相对于 k /= 2)
处理3:将底数和指数中提出来的2进行计算,并使之称为新的底数( a *= a )
计算,将左方的五个数字相乘
步骤 | 备注 | res | a | k | |||||
---|---|---|---|---|---|---|---|---|---|
0 | 初始 |
|
|
|
|
|
1 | 3 | 10011 |
1 | 处理1 | 3 | 3 | ||||||
处理2 |
|
|
|
|
01001 | ||||
处理3 |
|
|
|
|
9 | ||||
2 | 处理1 | 9 | 27 | ||||||
处理2 |
|
|
|
00100 | |||||
处理3 |
|
|
|
81 | |||||
3 | 处理1 | 1 | 跳过 | ||||||
处理2 |
|
|
00010 | ||||||
处理3 |
|
|
6561 | ||||||
4 | 处理1 | 1 | 跳过 | ||||||
处理2 |
|
00001 | |||||||
处理3 |
|
43,046,721 | |||||||
5 | 处理1 | 43,046,721 | 1,162,261,467 | ||||||
处理2 | --- | 00000 | |||||||
处理3 | --- |
所以最终结果是1,162,261,467
其中涉及到的知识点
按位与 &
先转换为二进制数,再对每一位进行与运算(一一得一,其余为零)
a | b | 二进制 a | 二进制 b | a & b (二进制) | a & b |
---|---|---|---|---|---|
5 | 5 | 101 | 101 | 101 | 5 |
5 | 4 | 101 | 100 | 100 | 4 |
5 | 3 | 101 | 011 | 001 | 1 |
5 | 2 | 101 | 010 | 000 | 0 |
5 | 1 | 101 | 001 | 001 | 1 |
5 | 0 | 101 | 000 | 000 | 0 |
还可以利用这个判断奇偶数,将一个数转换为二进制的如下形式
从到2n(n>1)都是偶数,偶数加偶数还是偶数,
是奇数,所以看一个数的奇偶数,就看0位了
也就是 N & 1 == 1 的话,则说明是奇数
移位运算 [ 右移(>>)为例 ]
转换成二进制后,将整体往右移一定位数,即,右移2位就是去掉最右边两位,左移反之
a | b | 二进制 a | a >> b(二进制) | a >> b |
---|---|---|---|---|
5 | 3 | 101 | 000 | 0 |
5 | 2 | 101 | 001 | 1 |
5 | 1 | 101 | 010 | 2 |
还有就是左/右移有个小细节:
一个无符号的int类型的数3的二进制形式:00000011(若该类型为八位的话)
左/右移的话(也就是相当于去到最右/左边的一位数):
左移后:0000011?
右移后:?0000001
其中,问号原先是不在该数据的界限之内,所以是不清楚他原先是0还是1
(我记得其中一个以为运算是补上0的,但我忘记了,而我也懒得去尝试了)
基于C/C++实现大指数幂的计算相关推荐
- 【2017年第1期】基于外卖物流配送大数据的调度系统
蒋凡,徐明泉, 崔代锐 百度外卖研发中心 中图分类号:TP399 文献标识码:A doi:10.11959/j.issn.2096-0271.2017013 Scheduling system ...
- 第三届大湾区杯B题思路及代码-基于宏观经济周期的大类资产配置策略构建
B 题 基于宏观经济周期的大类资产配置策略构建 赛题背景介绍: 赛题数据描述: 问题1. 寻找出高频有效的宏观经济指标,将 2001 年-2021 年国内的宏观经济运行状况划 分成不同的经济状态:(比 ...
- 基于AI排序算法的指数增强策略
在介绍AI排序算法之前我们先介绍另外一个术语:特征工程 特征工程是使用专业背景知识和技巧来处理数据,使得特征能在机器学习算法上发挥更好作用的工程实践.这样解释可能并不直观.举例说明,当我们选择用指标来 ...
- 大数据交易研究_学术著作 | 基于电商平台大数据的特征价格指数研究——统计研究...
基于电商平台大数据的特征价格指数研究 作者:雷泽坤,辽宁大学经济学院,清华大学中国经济社会数据研究中心:郑正喜,上海财经大学统计与管理学院,清华大学中国经济社会数据研究中心:许宪春,清华大学中国经济社 ...
- java中怎么实现指数幂,java中幂指数值的运算代码解析
说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...
- 图说2016深度学习十大指数级增长
转自:https://www.52ml.net/21402.html http://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=26519906 ...
- 计算指数_计算大指数
计算指数 计算大指数 背景:这是一篇有关如何快速有效地计算大数指数的快速文章. 从基本的乘法算法开始,它随后给出了更快的算法和一些快速示例. 本文中使用的技术可用于一般数学,加密等. 在本文中,使用以 ...
- 判断一个数是不是2的指数幂
判断一个数是不是2的指数幂 求一个数是不是2的指数幂 2^0=1,2^1=2,2^2=4,2^3=8 1 1的二进制为1 2的二进制为10 4的二进制为100 8的二进制为1000 发现只有最高位为1 ...
- 对应chd5.14的spark_GitHub - shixiaopengql/BigData-News: 基于Spark2.2新闻网大数据实时系统项目...
基于Spark2.2新闻网大数据实时系统项目 1. 说明 2.环境配置 2.1 CDH-5.14.2 (安装步骤可参考地址),关于版本是按实际操作, CDH的版本兼容性很好. Service hado ...
最新文章
- 基于PowerShell 3.0的web接口测试
- 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
- 深入理解Java中的逃逸分析
- 雷林鹏分享:C# 匿名方法
- 【OCR技术】字符识别技术总览
- 【一天一个挨打小技巧】暴力磁力种子磁力链接下载
- 【Latex论文排版】表格、图片和公式
- 教师个人三年发展规划
- Obsidian 插件安装
- 南京航空航天大学计算机组成原理,2017年南京航空航天大学计算机科学与技术学院829计算机专业基础之计算机组成原理考研题库...
- 算法提高 排队打水问题 无聊刷个水题
- html代码中文乱码解决
- 探究dosbox打印字符时的bug问题
- 苹果以旧换新活动_为什么苹果手机回收官方报价那么低?内行人告诉你!
- F1Delta Time 大奖赛世界巡回赛来啦
- 入门网安学习之路第一天
- 【MR】剖析YARN中uber模式
- 计算机毕业设计Java中医保健网站(源码+系统+mysql数据库+Lw文档)
- Realsense深度相机+pyqt5+应用案例(基础篇1)
- [渝粤教育] 中原工学院 互换性与测量技术基础 参考 资料