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;
    }

  • 相关阅读:
    v4v7升级到androidx过程
    iOS13 ,xcode11新建项目真机运行出现黑屏
    逆向微信时使用runtime方法交换后因找不到方法而崩溃的解决方式
    block不需要__weak的几种情况
    使用Xcode 11.3bata版本创建的工程webview无法加载http
    iOS 隐藏/显示状态栏
    iOS开发之cell中self和self.contentview的区别
    栈是吃了吐 堆是吃了拉
    工厂方法
    NSNotification、KVO、Delegate都是同步的
  • 原文地址:https://www.cnblogs.com/chen9510/p/4698734.html
Copyright © 2011-2022 走看看