• 分治思想求解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, 其他同理

  • 相关阅读:
    kafka那些事儿
    netty
    kafka为什么吞吐量高,怎样保证高可用
    通用mybatis单表操作接口
    P1058立体图
    P2258 子矩阵
    P1439 【模板】最长公共子序列(LCS)
    洛谷P2672 推销员
    P3373线段树2
    P5018 对称二叉树
  • 原文地址:https://www.cnblogs.com/Sunlnx/p/3406328.html
Copyright © 2020-2023  润新知