模板-自动取模整型mint
输入为int64类型,底层用int64表示,每次运算后自动取模。
template<int MOD> struct MInt { i64 x; int norm(i64 u) const {u%=MOD; if(u<0) u+=MOD; return u;} MInt(i64 v=0):x(norm(v)) {} int val() const {return x;} MInt operator-() const {return MInt(norm(MOD-x));} MInt inv() const {assert(x!=0); return power(MOD-2);} MInt &operator*=(const MInt &o) {x=norm(x*o.x); return *this;} MInt &operator+=(const MInt &o) {x=norm(x+o.x); return *this;} MInt &operator-=(const MInt &o) {x=norm(x-o.x); return *this;} MInt &operator/=(const MInt &o) {*this *= o.inv(); return *this;} friend MInt operator*(const MInt &a, const MInt &b) {MInt ans=a; ans*=b; return ans;} friend MInt operator+(const MInt &a, const MInt &b) {MInt ans=a; ans+=b; return ans;} friend MInt operator-(const MInt &a, const MInt &b) {MInt ans=a; ans-=b; return ans;} friend MInt operator/(const MInt &a, const MInt &b) {MInt ans=a; ans/=b; return ans;} friend std::istream &operator>>(std::istream &is, MInt &a) {i64 u; is>>u; a=MInt(u); return is;} friend std::ostream &operator<<(std::ostream &os, const MInt &a) {os<<a.val(); return os;} MInt power(i64 b) const {i64 r=1, t=x; while(b){if(b&1) r=r*t%MOD; t=t*t%MOD; b/=2;} return MInt(r);} }; using mint = MInt<998244353>;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?