zoukankan      html  css  js  c++  java
  • 变治法 二进制幂

    从左至右二进制幂算法

    #  include <stdio.h>
    int leftRightBinaryExponentiation(int a, int b[4]);
    int rightLeftBinaryExponentiation(int a, int b[4]);
    //计算2的十三次方  1101 是13的二进制表达
    void main()
    {
        int B[]={1, 1,0, 1 }; 
            int C[]={1, 0,01, 1 };
        int a=2;
         printf("%d
    ",    leftRightBinaryExponentiation(a,B) );
         printf("%d
    ",    rightLeftBinaryExponentiation(a,B) );
    }
     
        /**
         * 
         * 如 a^13 = a^(1*2^3 + 1*2^2 + 0*2^1 + 1*2^0)
         * 
         * @param a底数
         *            
         * @param b 幂二进制霍纳表达式(数组顺序幂次高到底)
         */
    //从左至右二进制幂
    int leftRightBinaryExponentiation(int a, int b[4])
    {
            int product = a;                               
            int i;
            // b[0]一定为1(要么为1,要么为0),因为它是最高位系数,最高位系数只能是1
            for ( i = 1; i <4; i++)
            {
                product = product * product;
     
                if (b[i] == 1)
                    product *= a;
            }
     
            return product;
    }
     
        /**
         * 
         * 如 a^13 = a^(1*2^3 + 1*2^2 + 0*2^1 + 1*2^0)
         * 
         *  a   底数
         *         
         *  b   幂二进制霍纳表达式(数组顺序幂次高到底)
         *         
         * @return
         */
       //从右至左二进制幂
        int rightLeftBinaryExponentiation(int a, int b[4])
        {
            int i;
            int product =1;
            int term = a;
        
            for ( i =3; i >=0 ; i--)
            {
                
                if(b[i] == 1)
                    product *=term;
                term *= term;
               
            }
             
            return product;
        }
     
    从右至左算法 :term的初始值为a。第一次循环结束之后为a的平方,第二次循环结束为a的四次方。一次类推。。。。每一次循环是否乘以a看数组B是否为1,是1则乘以a。
  • 相关阅读:
    Hit Event 击中碰撞
    基于ReentrantLock通知唤醒的生产消费模式
    spring 源码构建
    读写分离、分库、分表
    python 反射的使用
    基础算法
    git 命令使用
    java设计模式应用
    linux 中python的使用
    linux命令
  • 原文地址:https://www.cnblogs.com/220l/p/4127113.html
Copyright © 2011-2022 走看看