zoukankan      html  css  js  c++  java
  • modint

    // modint
    #define mod 998244353
    struct modint{
    	int x;
    	modint(int o=0){x=o;}
    	modint &operator = (int o){return x=o,*this;}
    	modint &operator +=(modint o){return x=x+o.x>=mod?x+o.x-mod:x+o.x,*this;}
    	modint &operator -=(modint o){return x=x-o.x<0?x-o.x+mod:x-o.x,*this;}
    	modint &operator *=(modint o){return x=1ll*x*o.x%mod,*this;}
    	modint &operator ^=(int b){
    		modint a=*this,c=1;
    		for(;b;b>>=1,a*=a)if(b&1)c*=a;
    		return x=c.x,*this;
    	}
    	modint &operator /=(modint o){return *this *=o^=mod-2;}
    	modint &operator +=(int o){return x=x+o>=mod?x+o-mod:x+o,*this;}
    	modint &operator -=(int o){return x=x-o<0?x-o+mod:x-o,*this;}
    	modint &operator *=(int o){return x=1ll*x*o%mod,*this;}
    	modint &operator /=(int o){return *this *= ((modint(o))^=mod-2);}
    	template<class I>friend modint operator +(modint a,I b){return a+=b;}
    	template<class I>friend modint operator -(modint a,I b){return a-=b;}
    	template<class I>friend modint operator *(modint a,I b){return a*=b;}
    	template<class I>friend modint operator /(modint a,I b){return a/=b;}
    	friend modint operator ^(modint a,int b){return a^=b;}
    	friend bool operator ==(modint a,int b){return a.x==b;}
    	friend bool operator !=(modint a,int b){return a.x!=b;}
    	bool operator ! () {return !x;}
    	modint operator - () {return x?mod-x:0;}
    	bool operator <(const modint&b)const{return x<b.x;}
    };
    inline modint qpow(modint x,int y){return x^y;}
    
    vector<modint> fac,ifac,iv;
    inline void initC(int n)
    {
    	if(iv.empty())fac=ifac=iv=vector<modint>(2,1);
    	int m=iv.size(); ++n;
    	if(m>=n)return;
    	iv.resize(n),fac.resize(n),ifac.resize(n);
    	For(i,m,n-1){
    		iv[i]=iv[mod%i]*(mod-mod/i);
    		fac[i]=fac[i-1]*i,ifac[i]=ifac[i-1]*iv[i];
    	}
    }
    inline modint C(int n,int m){
    	if(m<0||n<m)return 0;
    	return initC(n),fac[n]*ifac[m]*ifac[n-m];
    }
    inline modint sign(int n){return (n&1)?(mod-1):(1);}
    

    任意模数:

    #include<bits/stdc++.h>
    #define For(i,a,b) for(register int i=(a);i<=(b);++i)
    #define Rep(i,a,b) for(register int i=(a);i>=(b);--i)
    //#define int long long
    using namespace std;
    inline int read()
    {
    	char c=getchar();int x=0;bool f=0;
    	for(;!isdigit(c);c=getchar())f^=!(c^45);
    	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
    	if(f)x=-x;return x;
    }
    
    int mod;
    typedef unsigned long long ull;
    namespace FM{
    	typedef __uint128_t L;
    	struct FastMod{
    		ull b,m;
    		FastMod(ull b):b(b),m(ull((L(1)<<64)/b)){}
    		ull reduce(ull a){ull q=(ull)((L(m)*a)>>64),r=a-q*b;return r>=b?r-b:r;}
    	};
    	FastMod F(2);
    }
    
    struct modint{
    	int x;
    	modint(int o=0){x=o;}
    	modint &operator = (int o){return x=o,*this;}
    	modint &operator +=(modint o){return x=x+o.x>=mod?x+o.x-mod:x+o.x,*this;}
    	modint &operator -=(modint o){return x=x-o.x<0?x-o.x+mod:x-o.x,*this;}
    	modint &operator *=(modint o){return x=FM::F.reduce(1ull*x*o.x),*this;}
    	modint &operator ^=(int b){
    		modint a=*this,c=1;
    		for(;b;b>>=1,a*=a)if(b&1)c*=a;
    		return x=c.x,*this;
    	}
    	modint &operator /=(modint o){return *this *=o^=mod-2;}
    	modint &operator +=(int o){return x=x+o>=mod?x+o-mod:x+o,*this;}
    	modint &operator -=(int o){return x=x-o<0?x-o+mod:x-o,*this;}
    	modint &operator *=(int o){return x=FM::F.reduce(1ull*x*o),*this;}
    	modint &operator /=(int o){return *this *= ((modint(o))^=mod-2);}
    	template<class I>friend modint operator +(modint a,I b){return a+=b;}
    	template<class I>friend modint operator -(modint a,I b){return a-=b;}
    	template<class I>friend modint operator *(modint a,I b){return a*=b;}
    	template<class I>friend modint operator /(modint a,I b){return a/=b;}
    	friend modint operator ^(modint a,int b){return a^=b;}
    	friend bool operator ==(modint a,int b){return a.x==b;}
    	friend bool operator !=(modint a,int b){return a.x!=b;}
    	bool operator ! () {return !x;}
    	modint operator - () {return x?mod-x:0;}
    };
    inline modint qpow(modint x,int y){return x^y;}
    
    vector<modint> fac,ifac,iv;
    inline void initC(int n)
    {
    	if(iv.empty())fac=ifac=iv=vector<modint>(2,1);
    	int m=iv.size(); ++n;
    	if(m>=n)return;
    	iv.resize(n),fac.resize(n),ifac.resize(n);
    	For(i,m,n-1){
    		iv[i]=iv[mod%i]*(mod-mod/i);
    		fac[i]=fac[i-1]*i,ifac[i]=ifac[i-1]*iv[i];
    	}
    }
    inline modint C(int n,int m){
    	if(m<0||n<m)return 0;
    	return initC(n),fac[n]*ifac[m]*ifac[n-m];
    }
    inline modint sign(int n){return (n&1)?(mod-1):(1);}
    
    #define fi first
    #define se second
    #define pb push_back
    #define mkp make_pair
    typedef pair<int,int>pii;
    typedef vector<int>vi;
    
    #define maxn 200005
    #define inf 0x3f3f3f3f
    
    void initmod(){mod=read(),FM::F=FM::FastMod(mod);}
    
    signed main()
    {
    	initmod();
    	
    	return 0;
    }
    
  • 相关阅读:
    理论+实践解析“IT治理”之模式与原则
    iOS开发如何避免安全隐患
    DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?
    自动化测试最佳实践(一):从纺锤模型到金字塔模型
    宜信开源|手把手教你安装第一个LAIN应用
    宜信开源|数据库审核软件Themis的规则解析与部署攻略
    开源|性能优化利器:数据库审核平台Themis的选型与实践
    小老板,我300M的网,网速很慢怎么办?
    JSP、ASP、PHP Web应用程序怎么这么多P!
    难道你现在还不知道:C/S和B/S
  • 原文地址:https://www.cnblogs.com/Rainbowsjy/p/modint.html
Copyright © 2011-2022 走看看