程序员人生 网站导航

快速幂

栏目:php教程时间:2016-08-08 11:14:53

题目

计算an%b,其中a,b和n都是32位的整数。

解题

直接求超时

class Solution { /* * @param a, b, n: 32bit integers * @return: An integer */ public int fastPower(int a, int b, int n) { // write your code here if(n==0){ return 1%b; } int result = 1; for(int i=1;i<=n;i++){ result = result * a%b; } return result; } };

仿照求幂的方法
result要定义为Long,否则异常使结果毛病

class Solution { /* * @param a, b, n: 32bit integers * @return: An integer */ public int fastPower(int a, int b, int n) { // write your code here if(n==0) return 1%b; if(n==1){ return a%b; } long result = fastPower(a,b,n/2); result = (result * result)%b; if(n%2==1){ result = result * a%b; } result = result%b; return (int)result; } };

网上看到下面的快幂算法不知道为何出错

class Solution { /* * @param a, b, n: 32bit integers * @return: An integer */ public int fastPower(int a, int b, int n) { // write your code here if(n==0) return 1%b; if(n==1){ return a%b; } long res = 1; while(n> 0){ if((n&1)==1) res = (res*a)%b; n = n>>1; a = (a * a)%b; } return (int)res; } };
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐