码迷,mamicode.com
首页 > 其他好文 > 详细

快速运算模板(未完待续)

时间:2019-10-05 18:12:35      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:lin   getc   har   ==   long   二进制   getchar   tchar   更新   

快速运算题目(持续更新)

\(1.\) \(Raising\) \(Modulo\) \(Numbers\)

快速幂

细节:注意返回答案前取模。

$View$ $Code$

inline long long readl()
{
    long long ret=0,f=1;
    char ch=getchar();
    while(ch>‘9‘||ch<‘0‘)
    {
        if(ch==‘-‘)
            f=-1;
        ch=getchar();
    }
    while(ch>=‘0‘&&ch<=‘9‘)
    {
        ret=(ret<<1)+(ret<<3)+ch-‘0‘;
        ch=getchar();
    }
    return ret*f;
}
inline long long qpow(long long a,long long b,long long mod)
{
    long long ans=1;
    while(b)
    {
        if(b&1)
            ans=ans*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return ans%mod;
}
long long a,b,p;
int main()
{
    a=readl();
    b=readl();
    p=readl();
    printf("%lld\n",qpow(a,b,p));
    return 0;
}

快速乘(二进制拆分)

$View$ $Code$

inline long long readl()
{
    long long ret=0,f=1;
    char ch=getchar();
    while(ch>‘9‘||ch<‘0‘)
    {
        if(ch==‘-‘)
            f=-1;
        ch=getchar();
    }
    while(ch>=‘0‘&&ch<=‘9‘)
    {
        ret=(ret<<1)+(ret<<3)+ch-‘0‘;
        ch=getchar();
    }
    return ret*f;
}
inline long long qpow(long long a,long long b,long long mod)
{
    long long ans=1;
    while(b)
    {
        if(b&1)
            ans=(ans+a)%mod;
        a=(a<<1)%mod;
        b>>=1;
    }
    return ans%mod;
}
long long a,b,p;
int main()
{
    a=readl();
    b=readl();
    p=readl();
    printf("%lld\n",qpow(a,b,p));
    return 0;
}

快速乘(long double)

快速运算模板(未完待续)

标签:lin   getc   har   ==   long   二进制   getchar   tchar   更新   

原文地址:https://www.cnblogs.com/Peter0701/p/11625058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!