zoukankan      html  css  js  c++  java
  • 幂的运算:X的n次幂

    计算X的n次幂,有多种算法

    例子:计算2的62次方。

    method 1 :time = 1527 纳秒。

    常规思路,进行61次的乘法!

    private static long mi(long X, long n) {
    		long start = System.nanoTime();
    		long result = 1;
    		for (long k = 0; k < n; k++) {
    			result *= X;
    		}
    		System.out.println(System.nanoTime()-start);
    		return result;
    	}
    

    method 2 :time = 113 纳秒

    进行拆分:2^62 = (2^31)^2 = (2^31)*(2^31)         // 得到 2^31 的值的情况下,需要 1 次乘法

         2^31 = (2^15)^2*2 = (2^15)*(2^15)*2   //  得到 2^15 的值的情况下,需要 2 次乘法

           2^15 = (2^7)^2*2 = (2^7)*(2^7)*2       //  得到 2^7 的值的情况下,需要 2 次乘法

           2^7 = (2^3)^2*2 = (2^3)*(2^3)*2        //  得到2^3 的值的情况下,需要 2 次乘法 

         2^3 = 2*2*2                //  …………………………,需要2次乘法

    所以:该方法需   2+2+2+2+1 = 9 次乘法!

         /**
    	 * 求x的n次方的值。
    	 * 幂函数:
    	 * x的n次幂
    	 * @param x
    	 * @param n
    	 * @return
    	 */
    	public static long pow(long x, long n) {
    
    		long start = System.nanoTime();
    		if (n == 0) {
    			System.out.println(System.nanoTime()-start);
    			return 1;
    		}
    		// 如果是偶数
    		if (isEven(n)) {
    			return pow(x * x, n / 2);
    		} else {
    			return pow(x * x, n / 2) * x;
    		}
    	}
    
    	/**
    	 * 判断x是否是偶数
    	 *
    	 * @param x
    	 * @return
    	 */
    	private static Boolean isEven(long x) {
    		if (x % 2 == 0) {
    			return true;
    		}
    		if (x % 2 == 1) {
    			return false;
    		}
    		return false;
    	}
    
    凡你能说的,你说清楚。凡你不能说的,留给沉默!
  • 相关阅读:
    代理
    博客园主题
    JS_1
    脚本语言
    Hadoop生态体系
    Hadoop序列化程序报错
    46. 全排列
    1038 Recover the Smallest Number (30分)
    1064 Complete Binary Search Tree (30分)
    1034 Head of a Gang (30分)
  • 原文地址:https://www.cnblogs.com/dhcao/p/10055385.html
Copyright © 2011-2022 走看看