数论v2

本文介绍了一个使用C++实现的数学运算库,包括模乘法(mp)和快速幂(fp)等基本数学运算,并提供了一种优化的筛法结构用于素数判断和生成。该文还展示了如何通过位操作提高计算效率。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mod 1000000007
#define maxint 2147483648
#define nc1
#define rg register
#define rg1
#define rg2
#define rg3
typedef long long ll;
namespace basicmath{
    inline ll mp(ll a,ll b,ll p){
        if(p<3037000000ll) return a*b%p;
#ifdef nc1
        if(p<1099511627776ll) return (((a*(b>>20)%p)<<20)+(a*(b&((1<<20)-1))))%p;
#endif
        ll d=(ll)(a*(long double)b/p+0.5); ll ret=(a*b-d*p)%p;
        if (ret<0) ret+=p; else if (ret>=p) ret-=p;
        return ret;
    }
    inline ll fp(int a,int b,int p){ a%=p,b%=p-1; int ans=1; for(;b;b>>=1,a=(ll)a*a%p) if(b&1) ans=(ll)ans*a%p; return ans; }
    inline ll fp(ll a,ll b,ll p){ a%=p,b%=p-1; ll ans=1ll; for(;b;b>>=1,a=mp(a,a,p)) if(b&1) ans=mp(a,ans,p); return ans; }
    template<int max=10000007> struct sieve{
        int q[max+5]; int pr[max/4],pl,rxsiz;
        inline void generate(rg3 int n=max){            //// rg3
            for(rg1 int i=2;i<=n;++i){                  //// rg1
                if(!q[i]) pr[pl++]=i,q[i]=i;
                for(rg2 int j=
            }
        }
    }
}
int main(){
    return 0;
}

转载于:https://www.cnblogs.com/tmzbot/p/4980615.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值