[LintCode]快速幂(数论)
Posted hdw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode]快速幂(数论)相关的知识,希望对你有一定的参考价值。
计算a^n % b,其中a,b和n都是32位的整数。
快速幂搞就过了.快速幂首先就是要知道
(a*b)%c = ((a%c)*b)%c ,所以经过推导得出.
(a^n)%b = ((((a%b)*a)%b)*a)..........%b)*a) %b (n次)
这样只能解决的a^n 超出计算机计数范围,复杂度还是没有降下来呢.
怎么办呢^O^,bit-manipulation!!!!!!
具体详解自行百度好了^_^(利用了二分的思想)
Code:
class Solution { /* * @param a, b, n: 32bit integers * @return: An integer */ public int fastPower( int a, int b, int n ) { Long ret = new Long(1); long t=0; t=a; if(b==1) return a%b; while(n>0){ if(n%2==1){ ret = (ret*t)%b; } n=n>>1; t=(t*t)%b; } return ret.intValue(); } };
以上是关于[LintCode]快速幂(数论)的主要内容,如果未能解决你的问题,请参考以下文章