快速幂
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂相关的知识,希望对你有一定的参考价值。
1、理解
快速幂主要的思想就是分治。对指数进行二分,但是要求判断一下指数的奇偶性。
因为二分是不断除2取整,所以在奇数的时候要多乘一项。
比如 x^n
n为偶数:x^n = x^(n/2)*x^(n/2);
n为奇数:x^n = x^(n/2)*x^(n/2)*x;
2、Code
a)递归
//递归写法 #include<bits/stdc++.h> using namespace std; int quick_pow(int base,int n) { if(n==0) return 1; if(n==1) return base; int res = quick_pow(base,n>>1); res *= res; if( n & 1) // n为奇数 { res *= base; } return res; } int main() { int a,b; while(~scanf("%d%d",&a,&b)) { printf("res----%d\n",quick_pow(a,b)); } return 0; }
b)非递归
//非递归写法 #include<bits/stdc++.h> using namespace std; int quick_pow(int base, int n) { int res = 1; while(n) { if(n&1) res = res*base; base *= base; n >>= 1; } return res; } int main() { int a,b; while(~scanf("%d%d",&a,&b)) { printf("res----%d\n",quick_pow(a,b)); } return 0; }
以上是关于快速幂的主要内容,如果未能解决你的问题,请参考以下文章