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

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

\(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)

猜你喜欢

转载自www.cnblogs.com/Peter0701/p/11625058.html
今日推荐