zoukankan      html  css  js  c++  java
  • O(1)快速乘,慢速乘,快速幂

    快速乘

    引自2009国家集训队论文:骆可强:《论程序底层优化的一些方法与技巧》 

    代码://挺迷的,不知道为什么,好用就是了

    ll fast_mult(ll a,ll b,ll mod)
    {
        return (a*b-(ll)((long double)a/mod*b)*mod+mod)%mod;
    }//ll为long long

    快速幂

    ll fpow(ll a,ll b,ll c)
    {
        a%=c;
        ll ans=1;
        while(b)
        {
            if(b&1) ans=ans*a%c;
            a=a*a%c;
            b>>=1;
        }
        return ans%c;
    }

    压行快速幂

    ll fpow(ll a,ll b,ll c)
    {
        ll ans=a;
        for(b--;b>0;b>>=1,a*=a%c,a%=c)
        if(b&1) ans*=a%c,ans%=c;
        return ans%c;
    }

    慢速乘(快速加)

    ll fmult(ll a,ll b,ll c)
    {
        a%=c;
        ll ans=0;
        while(b)
        {
            if(b&1) ans=(ans+a)%c;
            a=(a+a)%c;
            b>>=1;
        }
        return ans%c;
    }

     O(n)欧拉筛质数

    int vis[maxn],prime[maxn];
    void init(int n)
    {
        int cnt=0;
        vis[0]=1;
        vis[1]=1;
        for(int i=2;i<=n;i++)
        {
            if(!vis[i]) prime[cnt++]=i;
            for(int j=0;j<cnt&&i*prime[j]<=n;j++)
            {
                vis[i*prime[j]]=1;
                if(i%prime[j]==0) break;
            }
        }
    }

    质数vis=0 prime从0下标开始

  • 相关阅读:
    Java框架之Mybatis(一)
    Java框架之Hibernate(四)
    Java框架之Hibernate(三)
    递归与分治
    散列
    绪论
    系统的分类(二)
    系统的定义与分类(一)
    Guess My Number 游戏
    2.5 随机数的生成
  • 原文地址:https://www.cnblogs.com/YangKun-/p/12551236.html
Copyright © 2011-2022 走看看