zoukankan      html  css  js  c++  java
  • [快速幂]1

    引入:

    • 普通幂运算:
      (a^b) 及连续乘以(b)(a).

    显然,效率很TM

    • 首先,我们要知道,
      (x^y=x^ {y_1+y_2+...+y_n })
      例如,当(b=11)时,
      位权时最大的基本单位,他们可以拼成一定范围内的所有数,故二进制拆分是最快的,多重背包的优化也是这种思想。
      (b)拆成2进制,则(b=(1011)_2=(1×2^3+0×2^2+1×2^1+1×2^0)_{10})
      所以(a^b=a^{2^3+2+1})
      代码:
    #include<cstdio>
    inline int quick_pow(int A , int B){
    	int base = A, ans = 1;
    	while(B){
    		if(B & 1){//取B的末尾进行算位权
    			ans *= base;
    		}
    		base *= base;//及base=base^2,因为每次次数要按位加一
    		B >>= 1;//去掉一位
    	}
    	return  ans;
    }  
    int main(){
    	int a , b;
    	scanf("%d%d",&a , &b);
    	printf("%d",quick_pow(a , b));
    	return 0;
    } 
    
  • 相关阅读:
    杭电2081
    杭电2083
    杭电2084
    3/5/2014 cfb 小心
    116
    uva10003
    10815
    127
    674
    uva 13598
  • 原文地址:https://www.cnblogs.com/defense/p/11609905.html
Copyright © 2011-2022 走看看