首页 > 其他分享 >大数模板mod int

大数模板mod int

时间:2023-06-10 13:33:51浏览次数:30  
标签:const int ll operator return 模板 mod

大数模板,存档一下

template <ll M = ll(1e9 + 7)>
struct mod_int{
    ll x;
    mod_int(ll x = 0):x((x % M + M) % M){}
    mod_int operator + (mod_int b) const {return mod_int((x + b.x) % M);}
    mod_int operator - (mod_int b) const {return mod_int((x - b.x + M) % M);}
    mod_int operator * (mod_int b) const {return mod_int((x * b.x) % M);}
    mod_int operator / (mod_int b) const {return mod_int((x * b.inv().x) % M);}
    mod_int operator += (mod_int b) {return *this = *this + b;}
    mod_int operator -= (mod_int b) {return *this = *this - b;}
    mod_int operator *= (mod_int b) {return *this = *this * b;}
    mod_int operator /= (mod_int b) {return *this = *this / b;}
    mod_int operator - () const {return mod_int(-x);}
    mod_int operator ++ () const {return *this + 1;}
    mod_int operator -- () const {return *this - 1;}
    mod_int& operator= (const mod_int& b) {x = b.x; return *this;}
    mod_int& operator= (const int & b) {this->x = b; return *this;}
    bool operator == (mod_int b) const {return x == b.x;}
    bool operator != (mod_int b) const {return x != b.x;}
    friend ostream& operator << (ostream &out, const mod_int &a) {return out << a.x;}
    friend istream& operator >> (istream &in, mod_int &a) {return in >> a.x;}
    mod_int inv() const {
        ll a = x, b = M, u = 1, v = 0;
        while (b){
            ll t = a / b;
            a -= t * b; swap(a, b);
            u -= t * v; swap(u, v);
        }
        return mod_int(u);
    }

};

标签:const,int,ll,operator,return,模板,mod
From: https://www.cnblogs.com/tiany7/p/17471164.html

相关文章

  • 模板元编程之函数模板(一)
    一、概述函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,换句话说函数模板代表一个函数家族,它的表示看起来和普通的函数很相似,唯一的区别就是有些函数元素是未确定的,这些元素将在使用时被参数化。下面是一个返回两个值中最大者的函数模板template<typenam......
  • 【论文阅读】CvT:Introducing Convolutions to Vision Transformers
    ......
  • 典型用户模板分析
    用户一:名字:zz性别、年龄:男,19职业:大二学生收入:无知识层次和能力:大学本科,精通手机电脑各种功能生活/工作情况:以父母给的生活费为生动机,目的,困难:想垃圾分类正确,不会垃圾分类。用户偏好:喜欢对垃圾进行分类用户比例:80%典型场景:有强烈强迫症1.背景:(1)典型用户大......
  • 解决 ModuleNotFoundError: No module named 'pip'
    Traceback(mostrecentcalllast):File"d:\environment\python3\lib\runpy.py",line194,in_run_module_as_mainreturn_run_code(code,main_globals,None,File"d:\environment\python3\lib\runpy.py",line87,in_run_code......
  • JAVA——包装类及Integer的成员方法
    JAVA——包装类及Integer的成员方法用一个对象,把基本类型给包起来基本数据类型对应的对象byte->Byteshort->Shortchar->Characterint->Integerlong->Longfloat->Floatdouble->Doubleboolean->Boolean细节:因为在实际开发中,-128-127之间的数据,用的比较......
  • Luogu P1939 【模板】矩阵加速(数列)
    【模板】矩阵加速(数列)题目描述已知一个数列\(a\),它满足:\[a_x=\begin{cases}1&x\in\{1,2,3\}\\a_{x-1}+a_{x-3}&x\geq4\end{cases}\]求\(a\)数列的第\(n\)项对\(10^9+7\)取余的值。输入格式第一行一个整数\(T\),表示询问个数。以下\(T\)行,每行一个正......
  • Luogu P3390 【模板】矩阵快速幂
    【模板】矩阵快速幂题目背景一个\(m\timesn\)的矩阵是一个由\(m\)行\(n\)列元素排列成的矩形阵列。即形如\[A=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&......
  • Python使用tkinter的Treeview组件实现表格功能
    fromtkinterimportTk,Scrollbar,Framefromtkinter.ttkimportTreeview#创建tkinter应用程序窗口root=Tk()#设置窗口大小和位置root.geometry('500x300+400+300')#不允许改变窗口大小root.resizable(False,False)#设置窗口标题root.title('通信录管理系统')#使......
  • Python中直接查看对象值和使用print()输出的区别
    直接用代码来描述这个问题的现象:>>>x=r'C:\windows\notepad.exe'>>>x'C:\\windows\\notepad.exe'>>>print(x)C:\windows\notepad.exe>>>x='''Tomsaid,"Let'sgo."'......
  • Luogu B2105 矩阵乘法(模板)
    矩阵乘法题目描述计算两个矩阵的乘法。\(n\timesm\)阶的矩阵\(A\)乘以\(m\timesk\)阶的矩阵\(B\)得到的矩阵\(C\)是\(n\timesk\)阶的,且\(C[i][j]=A[i][0]\timesB[0][j]+A[i][1]\timesB[1][j]+\)……\(+A[i][m-1]\timesB[m-1][j](C[i][j]\)表示\(C\)......