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

    以前的话快速幂对我来说是个难题,写都写不出来,现在我理解快速幂算法的原理,知道算法的步骤,所以写起来就简单多了,

    当你练习的多的时候,自然就会的多了,原来的难题对你来说也会变得不算什么,所以,加油,多练习,做一题,会一类题;

    举个例子算3^10,变成3^(2^0*0 + 2^1*1 + 2^2*0 + 2^3*1), 也就是3^(2^1 + 2^3), 即3^2  *  3 ^8;

    即10变成二进制后就是1010,

    令ans = 1, pow = 3;

    第一次n = 1010(2),   1010(2)&1 = 0;  所以ans不变,即ans = 1        然后pow *= pow, 即pow = 9, n /= 2, 即n = 101(2);

    第二次n = 101(2),     101(2)&1 = 1;    所以ans *= pow;即ans = 9,       然后pow *= pow, 即pow = 81, n/= 2,即n = 10(2);

    第三次n = 10(2),       10(2) &1 = 0;     ans不变, ans = 9,              然后pow *= pow, 即pow = 81*81, n/=2, 即n = 1;

    第四次n = 1(2),         1(2)&1 = 1,    ans*= pow, 即ans = 9 * 81*81,pow *= pow,   即pow = 81^4,   n/= 2, 即n = 0;

    n = 0, 所以算法结束;

    #include <stdio.h>
    __int64 Qfact(int x, int n)
    {
        __int64 ret = 1, pow = x;
        while(n)
        {
            if(n&1)
                ret *= pow;
            pow *= pow;
            n /= 2;
        }
        return ret;
    }
    int main()
    {
        int x, n;
        while(~scanf("%d%d", &x, &n))
        {
            printf("%I64d
    ", Qfact(x, n));
        }
        return 0;
    }
  • 相关阅读:
    Asp.net Report动态生成
    Select2控件不能自适应的解决办法
    Bootstrap table 行编辑导航
    android – 无法解析AppCompatActivity
    Aspnet mvc移除WebFormViewEngine
    Android串口开发
    阿里云OCR图片转换成文字识别调用
    EF6实现软删除
    Audio播放
    asp.net webapi 的Request如何获取参数
  • 原文地址:https://www.cnblogs.com/rain-1/p/4761766.html
Copyright © 2011-2022 走看看