zoukankan      html  css  js  c++  java
  • power

      这个算法为SGI专属,并不在标准STL之列。用它来计算某数的n幂次方。这里所谓的n幂次是指自己对自己进行某种运算,达n次。运算类型可由外界指定;如果指定为乘法,就是乘幂。

      版本1:乘幂

    template <class T, class Integer>
    inline T power(T x, Integer n)
    {
        return power(x, n, multiplies<T>());//指定运算形式为乘法 
    }

      

      版本2:幂次方。如果指定为乘法运算,则当n >= 0时返回 x^n。

      注意,"MonoidOperation"必须满足结合律,但不需要满足交换律。

    template <class T, class Integer, class MonoidOperation>
    T power(T x, Integer n, MonoidOperation op)
    {
        if( n == 0)
            return identity_element(op);//取出“证同元素”identity element 
        else //所谓“证同元素” 
        {
            while((n & 1) == 0)
            {
                n >>= 1;
                x = op(x, x);
            }
            T result = x;
            n >>=1;
            while ( n != 0)
            {
                x = op(x, x);
                if((n & 1) != 0)
                    result = op(result, x);
                n >>= 1;
            }
            return result;
        }
    }
  • 相关阅读:
    eclipse常用快捷键
    Android 布局
    Android UI设计
    Android Context 是什么?
    内部类
    手写单例模式
    上课笔记:移动开发新利器-你好,Flutter
    Android Fragment
    Kotlin语言
    Android虚拟机和类加载机制
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8324352.html
Copyright © 2011-2022 走看看