[LintCode]140.快速幂
来源:互联网 发布:fragment重新加载数据 编辑:程序博客网 时间:2024/06/07 22:32
计算an % b,其中a,b和n都是32位的整数。
样例
例如 231 % 3 = 2
例如 1001000 % 1000 = 0
思路:类似于实现c语言中的pow函数。double pow( double x, double y );计算x的y次幂。
首先我们要知道取模运算的乘法法则: (a * b) % p = (a % p * b % p) % p 由这个定理我们可以知道原来a^n % b
1.如果n 为奇数可以转化为 (a^(n/2) * a^(n/2) * a ) %b = ((a^(n/2)%b * a^(n/2)%b)%b * (a)%b) %b
2. 如果n 为偶数可以转化为 (a^(n/2) * a^(n/2) ) %b = (a^(n/2)%b * a^(n/2)%b)%b
由于a^1 = a , a^0=1 ,然后递归的去求a^n ,这样我们每次就二分n,那么我们的实际的时间复杂度是O(log(n))。当n特别大的话,求幂就会变得特别快。
class Solution {public: /* * @param a, b, n: 32bit integers * @return: An integer */ int fastPower(int a, int b, int n) { if(n==0){ return 1%b; } if(n==1){ return a%b; } long long result = fastPower(a, b, n/2); if(n%2==1){ result = (result*result%b)*a%b;//不能直接result*result*a%b,因为不是除法 //result = (((result*result)%b) *(a%b))%b;也行 }else{ result = result*result%b; } return result; }};
阅读全文
0 0
- [LintCode]140.快速幂
- LintCode-快速幂
- Lintcode快速幂
- lintcode-快速幂-125
- LintCode 快速幂
- Lintcode 快速幂
- lintcode之快速幂
- lintcode ----快速幂
- LintCode 140-快速幂
- LintCode :快速幂
- lintcode(140)快速幂
- 快速幂-LintCode
- 快速幂—LintCode
- [LintCode] 快速幂 Fast Power
- LintCode-剑指Offer-(140)快速幂
- lintcode刷题——快速幂
- LintCode
- lintcode--
- php实现多继承-trait语法
- hdu 6103 Kirinriki(多校联赛)
- ioinic3---DOS命令下apk签名打包及常见问题解决
- 【leetcode】 17. Letter Combinations of a Phone Number
- 【Linux】KVM命令
- [LintCode]140.快速幂
- Problem 2195 检查站点<简单代码>
- HashMap
- C# Winform DataGridView 重新绘制行样式
- HBase应用设计性能优化方法总结
- weui的自定义Dialog,只能获取到第一次获取的dome元素的值
- hdu 1156
- JS不靠谱系列之枚举出时间段和对应的分钟数
- JS