zoukankan      html  css  js  c++  java
  • 快速取模

    typedef long long LL;

    LL quick(LL a,LL b,LL m)   //a^b%m  快速取模 使得复杂度从0(b)
    {                                   //             降低为0(log2(b))
        LL ans=1;
        while(b)
        {
            if(b&1) ans=ans*a%m;
            b>>=1;
            a=a*a%m;
        }
        return ans;
    }

    LL multi(LL a,LL b,LL m)         //   a*b%m  快速取模
    {
        LL ans=0;
        while(b)
        {
            if(b&1) ans=(ans+a)%m;
            b>>=1;
            a=(a+a)%m;
        }
        return ans;
    }

    例题:

    Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).

    #include <iostream>
    #include <cstdio>
    using namespace std;
    typedef long long LL;

    LL multi(LL a ,LL b,LL m)
    {
        a%=m;
        LL ans=0;
        while(b)
        {
            if(b&1)
            //ans=(ans+a)%m;
            {
                ans+=a;
                if(ans>=m)
                ans-=m;
            }
            b>>=1;


            //a=(a+a)%m;   使用加减及位运算速度比乘除及模运算快
            a<<=1;
            if(a>=m)
            a-=m;
        }
        return ans;
    }

    LL quick(LL a,LL b,LL m)
    {
        LL ans=1;
        a=a%m;
        while(b)
        {
            if(b&1)
            //ans=ans*a%m;
            ans=multi(ans,a,m);
            b>>=1;
            a=multi(a,a,m);
        }
        return ans;
    }

    int main()
    {
        LL a,b,c;
        while(scanf("%I64d%I64d%I64d",&a,&b,&c)!=EOF)                    //有些oj不认识%lld,可以使用%I64d
        {
            printf("%I64d ",quick(a,b,c));
        }
        return 0;
    }

  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/chen9510/p/4698734.html
Copyright © 2011-2022 走看看