首页 > 其他分享 >模板-自动取模整型mint

模板-自动取模整型mint

时间:2024-10-16 12:34:30浏览次数:1  
标签:std 取模 MInt i64 int64 整型 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>;

标签:std,取模,MInt,i64,int64,整型,mint
From: https://www.cnblogs.com/chenfy27/p/18469635

相关文章

  • 组合数与自动取模类(已封装)
    usingi64=longlong;template<classT>constexprTpower(Ta,i64b){Tres=1;for(;b;b/=2,a*=a){if(b%2){res*=a;}}returnres;}constexpri64mul(i64a,i64b,i64p){i64re......
  • three.js 鼠标点击获取模型对象
    three.js 创建模型后,想要实现点击模型获取模型对象触发相应事件。可以使用它提供的APITHREE.Raycaster()https://threejs.org/docs/index.html?q=Raycaster#api/en/core/Raycaster//监听点击事件window.addEventListener('click',(event)=>{event.preventDefault......
  • 整型:int
    整型:int整型变量的定义和输出注意://short<=int<=long<=longlong代码示例一:#include<stdio.h>intmain(){//数据类型标识符=值//无符号unsigned有符号signed(可以省略)//signedinta=-10......
  • StreamInTest
    packagecom.shrimpking.t1;importjava.io.BufferedReader;importjava.io.InputStreamReader;/***CreatedbyIntelliJIDEA.**@Author:Shrimpking*@create2024/9/1410:45*/publicclassStreamInTest{publicstaticvoidmain(String[]args)......
  • 从一组数(int整型)中找到出现次数最多的数字,并给出出现的次数,python实现
    要从一组整数中找到出现次数最多的数字及其出现的次数,可以使用Python中的collections模块中的Counter类。Counter类可以方便地统计列表中每个元素的出现次数。下面是一个具体的实现示例:fromcollectionsimportCounterdeffind_most_frequent(numbers):  """ ......
  • YOLOv8改进 | Conv篇 | 最新轻量化自适应提取模块LAE助力边缘设备部署计算(附代码 + 修
    一、本文介绍本文给大家带来的一个改进机制是最新由LSM-YOLO提出的轻量化自适应特征提取(LightweightAdaptiveExtraction,LAE)模块,其是LSM-YOLO模型中的关键模块,旨在进行多尺度特征提取,同时降低计算成本。LAE通过以下方式实现更有效的特征提取:多尺度特征提取、自适应特征提取......
  • 分析负数取模与取余的规则
    目录负数"取模"基本概念修正定义取整规则决定商的值取模和取余不一样.负数"取模"基本概念如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数q和r,满足a=q*d+r,且0<=r<d。其中,q被称为商,r被称为余数。//对应代码intmain(){inta=10;intd=3;printf......
  • CSP模拟 取模
    最近开始写CSP模拟的题,实际上考的题一点也不CSP题意有一个长度为\(n\)的序列\(A\),\(0\leqA_i<k\),你可以每次选取一个区间,将区间内所有元素\(+1\),然后将区间内所有元素对\(k\)取模。问最少几次操作可以把序列中所有元素都变为\(0\)。思路假设现在有一个数列\([2,3,......
  • Prometheus的拉取模式与zabbix推送模式有何区别?各有什么优缺点?
    Prometheus的拉取模式与Zabbix的推送模式在监控数据收集和处理方式上存在显著区别。以下是它们的主要区别及各自的优缺点:1.数据收集模式Prometheus拉取模式:Prometheus定期从被监控的目标(如Exporter、应用程序等)主动拉取数据。每个目标都需要暴露一个HTTP接口,Prome......
  • 整数在内存中的存储(含整型提升的详解)
    整数在内存中的存储整数的2进制表示法有三种,即:原码、反码和补码有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,最高位的⼀位是被当做符号位,剩余的都是数值位。           正整数的原、反、补码都相同。      ......