Calculate the a^n % b where a, b and n are all 32bit integers.Example
For 2^31 % 3 = 2For 100^1000 % 1000 = 0Challenge
O(logn)

这道题跟Pow这道题很像

数学问题,要求O(log n)的时间复杂度,也就是每次去掉一半的计算量,先要找到对应的数学公式:
(a * b) % p = (a % p * b % p) % p

所以(a^n)%b = (a^n/2 * a^n/2 * a) % b = ((a^n/2 * a^n/2)%b * a%b) % b
注意int和long的转化,防止溢出。

比较严谨的做法:

 1 class Solution {
 2     /*
 3      * @param a, b, n: 32bit integers
 4      * @return: An integer
 5      */
 6     public int fastPower(int a, int b, int n) {
 7         // write your code here
 8         long ret = getPower(a, b, n);
 9         return (int)ret;
10     }
11     public long getPower(int a, int b, int n){
12         if(a == 0) return 0;
13         if(n == 0) return 1 % b;
14         if(n == 1) return a % b;
15
16         long ret = getPower(a, b, n/2);
17         ret *= ret;
18         ret %= b;
19         if(n % 2 == 1){
20             ret = ret * (a % b);
21         }
22         return ret % b;
23     }
24 };

我当时的做法:

 1 class Solution {
 2     public int fastPower(int a, int b, int n) {
 3         if (n == 0) return 1%b;
 4         long half = fastPower(a, b, n/2);
 5         if (n % 2 == 0) {
 6             long temp = half * half;
 7             return (int)(temp % b);
 8         }
 9         else {
10             long temp = (half * half)%b * (a%b);
11             return (int)(temp % b);
12         }
13     }
14 };

 1 class Solution {
 2     /*
 3      * @param a, b, n: 32bit integers
 4      * @return: An integer
 5      */
 6     public int fastPower(int a, int b, int n) {
 7         long ret = helper(a, b, n);
 8         return (int)ret;
 9     }
10
11     public long helper(int a, int b, int n) {
12         if (n == 0) return 1%b;
13         long half = helper(a, b, n/2);
14         if (n % 2 == 0) {
15             return half * half % b;
16         }
17         else {
18             return ((half * half % b) * a%b)%b;
19         }
20     }
21 };

转载于:https://www.cnblogs.com/EdwardLiu/p/4276829.html

Lintcode: Fast Power相关推荐

  1. [LintCode] Fast Power

    Problem Calculate the a^n % b where a, b and n are all 32bit integers. Example For 2^31 % 3 = 2 For ...

  2. C++fast power快速指数的实现(附完整源码)

    C++fast power快速指数的实现算法 C++fast power快速指数的实现算法完整源码(定义,实现,main函数测试) C++fast power快速指数的实现算法完整源码(定义,实现,m ...

  3. 802.11 Power Save(节电/省电/节能)机制总结

    背景介绍 了解WIFI节能的机制之前,首先要了解WIFI能耗的消耗发生在什么状态下,显而易见,发送和接收肯定是消耗能量的,还有一点是要认识到的,Power Save通常是在STA端进行的,AP需要一直 ...

  4. Unity Shader:雾的数学运算以及在Unity中使用Fog

    文章目录 1,Unity Fog效果图 2,uniform fog均匀雾的数学公式推导 3,Fog在Unity中的应用 4,Unity Fog的源码分析 5,Unity exp fog VS unif ...

  5. SSH2.0编程 ssh协议过程实现(转)

    SSh协议: 全称为Secure Shell,即很安全的shell,主要目的是用来取代传统的telnet和r系列命令(rlogin,rsh,rexec等)远程登录和远程执行命令的工具,实现远程登录和远 ...

  6. 数字集成电路面试常见问题_关于空间级集成电路的常见误解

    数字集成电路面试常见问题 对集成电路辐射硬度的常见误解 (Common misconceptions on the radiation hardness of integrated circuits) ...

  7. C和C++算法完整教程专栏完整目录

    C和C++算法完整教程专栏完整目录 专栏说明如下 完整专栏目录如下 专栏说明如下 内容:C和C++算法完整教程 数量:680篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加 ...

  8. 04 Python基本数据类型

    数字类型及操作 整数类型 可正可负,没有取值范围限制 pow(x,y):计算 x^y,想算多大没有限制 四种进制 十进制:213,99,-14 二进制:以0b或0B开头:0b010,-0B110 八进 ...

  9. ZJOI2017 讲课Day1笔记

    额,参考一下大神的笔记.... 地址 http://www.cnblogs.com/ARZhu-NOIpAK/p/6596879.html Day1 2017-3-24 3:34:43 苟-- 富贵 ...

最新文章

  1. 语义分割--Dilated Residual Networks 之转载
  2. Struts2 interceptor使用经验小结
  3. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案
  4. dll 导出函数 下划线_内核中的代码完整性:深入分析ci.dll
  5. python 开源框架学习
  6. 项目思考001---近期这个电台购物项目的一点点思考
  7. php常见后缀绕过,文件包含漏洞(绕过姿势)
  8. 排序算法python实现_合并排序算法– Java,C和Python实现
  9. 2021年SWPUACM暑假集训day2并查集算法
  10. 小米IPO前员工写文爆料内部真实见闻—期权 部分裁员 离职大公开!
  11. ToStringBuilder.reflectionToString
  12. winrar 5.80正式版全球发布
  13. 详解Mysql执行计划explain
  14. android 自定义控件之AutoCompleteTextView邮箱后缀自动补全
  15. vc6.0中的dsp,dsw,ncb,opt,clw,plg,aps等文件的简单说明
  16. 关于华为pad没有出来直播的经验
  17. 【使用问题】密保邮箱接收不到验证码(解决办法)
  18. B端大数据量查询优化方案
  19. C# 使用md5查找文件夹内重复的文件
  20. matlab如何求矩阵行列式

热门文章

  1. linux path_lookup,Linux虚拟文件系统(4)-- 路径名查找
  2. linux execl 错误信息,Excel:自动隐藏错误结果的显示信息(转)
  3. android 动画间隔时间,Android使用View Animation实现动画加载界面
  4. mysql 所有外键_mysql中的外键
  5. java web 教程_Java Web服务教程
  6. Android ActionBar示例教程
  7. python string_Python String casefold()
  8. 使用PosixFilePermission的Java设置文件权限
  9. linux信号(二)--unix环境高级编程读书笔记
  10. 重新认识C#: 玩转指针