博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lintcode: Fast Power
阅读量:4518 次
发布时间:2019-06-08

本文共 1924 字,大约阅读时间需要 6 分钟。

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

这道题跟这道题很像

数学问题,要求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

你可能感兴趣的文章
xStream完美转换XML、JSON(转)
查看>>
code::Blocks 汉化经验
查看>>
(2017.10.10) 我对 JavaScript 历史的认识
查看>>
用aiohttp代替requests写异步爬虫
查看>>
ipv6下jdbc的连接数据库方式
查看>>
201521123069 《Java程序设计》第1周学习总结
查看>>
一线咨询师的絮絮叨叨
查看>>
文字分散对齐
查看>>
【NOIP 2012 国王游戏】 贪心+高精度
查看>>
【UOJ 117】欧拉回路
查看>>
用Pytorch训练MNIST分类模型
查看>>
一些不错的动画效果---郭雪彬
查看>>
iOS - TableViewCell分割线 --By吴帮雷
查看>>
jquery 获取input的值
查看>>
UVA 10003 - Cutting Sticks ( 区间dp )
查看>>
BETA 版冲刺前准备
查看>>
vue-表单绑定
查看>>
字典树(Trie)的基本实现(C++)
查看>>
Linux SSH & SCP命令
查看>>
用SQL语句操作数据
查看>>