矩阵快速幂之整数快速幂
2017-08-16 10:48
295 查看
如果现在要算X^8:则 X*X*X*X*X*X*X*X 按照寻常思路,一个一个往上面乘,则乘法运算进行7次。
但如果我们这样算 (X*X)(X*X)(X*X)*(X*X)
这种求法,先进行乘法得X^2,然后对X^2再执行三次乘法,这样去计算,则乘法运算执行4次。已经比七次要少。所以为了快速算的整数幂,就会考虑这种结合的思想。
现在的问题是如何分配才能让乘法运算的次数最少。
例如:X^19次方。
19的二进制为:1 0 0 1 1 。
由(X^m)*(X^n) = X^(m+n)
则X^19 = (X^16)(X^2)(X^1)
那么怎么来求解快速幂呢。请看下列代码:
求解X^N的值。
那么让我们来看看下面这段代码到底对不对:
对于X^19来说:
19的二进制为:1 0 0 1 1
初始:ans = 1; res = x;
则10011最后一位是1,所以是奇数。
ans = res*ans = x;
res = res*res = x^2;
然后右移一位,1 0 0 1
则1001最后一位是1,所以是奇数
ans = res*ans = x*(x^2) = x^3
res = res*res = x^2*x^2 = x^4
然后右移一位,1 0 0
则最后一位是0,所以当前的数为偶数。
res = res*res = x^4*x^4 = x^8
然后右移一位,1 0
最后一位是0,当前数是偶数。
res = res*res =x^8*x^8= x^16
然后右移一位,1
最后一位是1,当前数是奇数
ans = ans*res = (x^3)*(x^16) = x^19
res = res*res = x^32
可以看出res = X^m,m 始终是与二进制位置上的权值是相对应的。当二进制位为0时,我们只让res*res使幂指数*2.对应下一个二进制位的权值,当二进制位为1时,ans = ans*res 。则乘上了该乘的X幂次。
但如果我们这样算 (X*X)(X*X)(X*X)*(X*X)
这种求法,先进行乘法得X^2,然后对X^2再执行三次乘法,这样去计算,则乘法运算执行4次。已经比七次要少。所以为了快速算的整数幂,就会考虑这种结合的思想。
现在的问题是如何分配才能让乘法运算的次数最少。
例如:X^19次方。
19的二进制为:1 0 0 1 1 。
由(X^m)*(X^n) = X^(m+n)
则X^19 = (X^16)(X^2)(X^1)
那么怎么来求解快速幂呢。请看下列代码:
求解X^N的值。
int QuickPow(int x,int N) { int ans = 1,res = x; while(N){ if(N&1) ans *=res; res *= res; N>>=1; } return ans; }
那么让我们来看看下面这段代码到底对不对:
对于X^19来说:
19的二进制为:1 0 0 1 1
初始:ans = 1; res = x;
则10011最后一位是1,所以是奇数。
ans = res*ans = x;
res = res*res = x^2;
然后右移一位,1 0 0 1
则1001最后一位是1,所以是奇数
ans = res*ans = x*(x^2) = x^3
res = res*res = x^2*x^2 = x^4
然后右移一位,1 0 0
则最后一位是0,所以当前的数为偶数。
res = res*res = x^4*x^4 = x^8
然后右移一位,1 0
最后一位是0,当前数是偶数。
res = res*res =x^8*x^8= x^16
然后右移一位,1
最后一位是1,当前数是奇数
ans = ans*res = (x^3)*(x^16) = x^19
res = res*res = x^32
可以看出res = X^m,m 始终是与二进制位置上的权值是相对应的。当二进制位为0时,我们只让res*res使幂指数*2.对应下一个二进制位的权值,当二进制位为1时,ans = ans*res 。则乘上了该乘的X幂次。
相关文章推荐
- 整数的快速幂和矩阵的快速幂
- Poj 3150 Cellular Automaton(矩阵快速幂, 循环矩阵快速幂)
- 整数快速幂(取模)、矩阵快速幂及其应用
- c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)
- 快速幂(整数 + 矩阵)
- 整数快速乘法/快速幂+矩阵快速幂
- 快速幂和矩阵快速幂-模板
- 快速求斐波那契数列(矩阵乘法+快速幂)
- 快速幂与矩阵快速幂
- 快速幂和矩阵快速幂
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
- 深夜敲模板_1——快速幂 && 矩阵的快速幂
- 快速幂(整数+矩阵):hdu 2817+poj3233+poj1995+poj3070
- 算法录 之 快速幂快速乘和矩阵快速幂。
- luogu3390:矩阵快速幂(矩阵乘法+快速幂)
- 快速幂和矩阵快速幂
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- POJ 3233 矩阵快速幂(做的快速幂的第一道题你敢信?
- 普通快速幂与矩阵快速幂
- 快速幂(普通快速幂、矩阵快速幂)