zoukankan      html  css  js  c++  java
  • 分治思想求解X的M次幂方

     1 package main
     2 
     3 import (
     4     "fmt"
     5 )
     6 
     7 //递归形式分治求解
     8 func power(x, m int) int {
     9     if m == 0 {
    10         return 1
    11     } else {
    12         y := power(x, m/2)
    13         y = y * y
    14         if m%2 != 0 {
    15             y = x * y
    16         }
    17         return y
    18     }
    19 }
    20 
    21 //迭代形式分治求解, 分析可用到如下图
    22 func power2(x, m int) int {
    23     y := 1
    24     var k uint32
    25     for k = 1; (m >> k) > 0; k++ {
    26     }
    27     k--
    28     for k > 0 {
    29         y = y * y
    30         if (m>>k)%2 > 0 {
    31             y = y * x
    32         }
    33         k--
    34     }
    35     y = y * y
    36     if m%2 != 0 {
    37         y = y * x
    38     }
    39     return y
    40 }
    41 func main() {
    42     x := 2
    43     m := 20
    44     fmt.Println(x, "^", m, power(x, m))
    45     fmt.Println(x, "^", m, power2(x, m))
    46 }

    
    

     //X的任意M次方,可从X的一次方,开始向上迭代产生,而路径的选择则根据M的二进制表示,来选择唯一路径,

    比如X^15, 15的二进制形式为1111, 则选择的路径对应上图中的1111, 其他同理

  • 相关阅读:
    每日日报2021.2.5
    每日日报2021.2.4
    每日日报2021 3/8
    每日日报2021 3/7
    每日日报2021 3/6
    每日日报2021 3/5
    每日日报 2021 3.4
    每日日报2021 3/3
    开课博客
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/Sunlnx/p/3406328.html
Copyright © 2011-2022 走看看