zoukankan      html  css  js  c++  java
  • 快速幂

    快速幂

    快速幂的作用就是快速算底数的n次幂。它的时间复杂度只有O(logN),比正常的O(N)的算法的速度快了不少。

    快速幂是二进制的应用。即把该数的指数化为2的各个次方的乘积的形势,达到优化时间的目的。

    例如:

    2^11=2048。

    11的二进制为1011。

    11=2^0*1+2^1*1+2^2*0+2^3*1=2^0+2^1+2^3。

    所以2^11=2^(2^0+2^1+2^3)。

    这样一来,时间复杂度就降低了。

    那么我们怎么使用程序实现呢。

     我们可以用(b&1)来求出二进制的最后一位,用(b>>=1)来表示删掉二进制的最后一位。

    每次计算二进制的最后一位,就可以实现快速幂了。

    代码:

     1 #include<cstdio>
     2 #define ll long long
     3 ll x,y,mod;
     4 ll pow(ll a,ll b){
     5     ll x=1,y=a;
     6     while(b){
     7         if(b&1)
     8             x=x*y%mod;
     9         y=y*y%mod;
    10         b>>=1;
    11     }
    12     return x;
    13 }
    14 int main(){
    15     scanf("%lld%lld%lld",&x,&y,&mod);
    16     printf("%lld",pow(x,y));
    17     return 0;
    18 }
    View Code
  • 相关阅读:
    常用模块
    递归函数
    内置函数与匿名函数
    Mac控制台相关操作
    Maven相关知识记录
    @Import底层实现原理
    spring循环依赖
    springcloud注册中心对比
    分布式事务
    Drools使用注意事项
  • 原文地址:https://www.cnblogs.com/jsawz/p/6936342.html
Copyright © 2011-2022 走看看