美文网首页
数据结构-二分法求幂-C

数据结构-二分法求幂-C

作者: dadalang | 来源:发表于2020-10-09 10:57 被阅读0次

二分法求幂

数据结构中二分法运用到求幂提高计算效率方式,算法精简这里做个简单解释及代码

原理自析

如求2^32: 代表底数跟指数,最终结果result

1.判断底数是否为0 为0 则直接输出0;

2.底数不为0时,判断指数是否为0,为0则输出1;

3.底数指数均不为0时,result=1,,进行运算:

A.指数与2求余的结果,如果为1则将result*底数;并且底数(新)= 底数(旧)*底数(旧)

B.指数与2求模的结果,作为新的指数,

3.最终当指数与2就模为0时,输出最终结果result

result只是将指数为1的数据进行最终乘法计算,(黑色字体为result相乘的数据)

2^6  =(2*2)^3

        =(2*2)^1 *(2*2)^2

        =(4)^1 *(4)^2

        =(4)^1 *(4*4)^1

        =(4)^1 *(16)^1

        =64

#include <iostream>

using namespace std;

int a, b;  //利用二分法快速求a^b

int main(int argc, char *argv[]) {

cin >> a >> b;

while (true)

{

int result = 1;

if (a == 0)

cout << 1 << endl;

else if (b == 0)

cout << 1 << endl;

else

{

while (b != 0)

{

if (b % 2 == 1)

{

result *= a;

}

a *= a;

b /= 2;

}

}

cout << "结果:" << result << endl;

cin >> a >> b;

}

return 0;

备注:以上二分法基本思路完成,通过参考资料给指数求余和求模,其实可以通过位运算进一步提高计算性能

b % 2等价于 b & 1,因为B为偶数时,其二进制最后一位一定是0,B为奇数时,其二进制最后一位一定是1;因此做与计算为0则为偶数,计算为1则为奇数

b / 2 等价于 b >> 1 ,因为B/2相当于将B的二进制每一位向后移动1位;

参考进阶资料公式 用于获取最终结果后三位

(a + b) % p = (a % p + b % p) % p (1)

(a - b) % p = (a % p - b % p ) % p (2)

(a * b) % p = (a % p * b % p) % p (3)

while(b>0) {

if(b&1) {//此处等价于if(b%2==1)

result = result * a%1000;}

b>>=1;//此处等价于b=b/2

a= (a* a) %1000;

 }

return result;

相关文章

  • 数据结构-二分法求幂-C

    二分法求幂 数据结构中二分法运用到求幂提高计算效率方式,算法精简这里做个简单解释及代码 原理自析 如求2^32: ...

  • 快速幂

    常规求幂 快速求幂(一般) 快速求幂 (递归) 快速求幂(位运算) 快速求幂(位运算,更简洁)

  • LeetCode 力扣 50. Pow(x, n)

    题目描述(中等难度) 就是求幂次方。 解法一 求幂次方,用最简单的想法,就是写一个 for 循环累乘。 至于求负幂...

  • Pow()函数

    pow(x,y)函数 求x的y次幂。见下例pow.c 编译:gcc -opow pow.c -lm-lm是链接ma...

  • 50. Pow(x, n)

    问题 Implement pow(x, n). 例子 pow(8, 8)16777216 分析 二分法快速幂 要点...

  • 用二分法计算a的n次幂<算法分析>

    实验目的: 1、复习java编程;2、掌握二分法的基本原理;3、掌握使用java程序进行二分法计算a的n次幂。 实...

  • java快速求幂算法

    1.引言 快速求幂算法是java算法与数据结构后面的习题。据说这个题目被当做面试考过。正好我也不懂,然后就看了下,...

  • 求幂、快速幂运算

    对一个给定的数计算乘幂。这一过程的参数是一个基数b和一个正整数的指数n,过程计算出b ^ n。一种方式是通过下面这...

  • 求幂-(京东2018)

    题目描述:求幂给出一个整数n,希望求出满足:ab=cd(1<=a,b,c,d<=n)的式子有多少?输入:2输出:6...

  • 分治求幂

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方

网友评论

      本文标题:数据结构-二分法求幂-C

      本文链接:https://www.haomeiwen.com/subject/zvtlpktx.html