首页 > 其他分享 >【模板】modint

【模板】modint

时间:2023-08-12 16:46:44浏览次数:73  
标签:return rhs 模板 operator modint friend const

modint by cjl
struct m{
	int x;m(int o=0){x=o;}m(lll o){x=o%mod;}m&operator+=(m a){return(x+=a.x)%=mod,*this;}m&operator-=(m a){return(x+=mod-a.x)%=mod,*this;}
	m&operator*=(m a){return(x=1ll*x*a.x%mod),*this;}m&operator^=( int b){m a=*this;x=1;while(b)(b&1)&&(*this*=a,1),a*=a,b>>=1;return*this;}
	m&operator/=(m a){return*this*=(a^=mod-2);}friend m operator+(m a,m b){return a+=b;}friend m operator-(m a,m b){return a-=b;}
	friend m operator*(m a,m b){return a*=b;}friend m operator/(m a,m b){return a/=b;}friend m operator^(m a, int b){return a^=b;}
	m operator-(){return 0-*this;}bool operator==(const m b)const{return x==b.x;}
};

仿照 atcoder library 写的

typedef long long LL;
template<unsigned P> struct modint{
	unsigned v; using ull=unsigned long long;
	template<class T> modint(T x=0):v((x%int(P)+int(P))%int(P)){}
	modint operator-()const{return modint(P-v);}
	modint inv()const{return qpow(*this,LL(P)-2);}
	modint&operator+=(const modint&rhs){if(v+=rhs.v,v>=P) v-=P; return *this;}
	modint&operator-=(const modint&rhs){return *this+=-rhs;}
	modint&operator*=(const modint&rhs){v=ull(v)*rhs.v%P; return *this;}
	modint&operator/=(const modint&rhs){return *this*=rhs.inv();}
	friend int raw(const modint&self){return self.v;}
	friend modint qpow(modint a,LL b){modint r=1;for(;b;b>>=1,a*=a) if(b&1) r*=a; return r;}
	friend modint operator+(modint lhs,const modint&rhs){return lhs+=rhs;}
	friend modint operator-(modint lhs,const modint&rhs){return lhs-=rhs;}
	friend modint operator*(modint lhs,const modint&rhs){return lhs*=rhs;}
	friend modint operator/(modint lhs,const modint&rhs){return lhs/=rhs;}
};
using Z=modint<998244353>;

注意那个 int(P) 非常重要。。。
精简版:但好像并没有

template<unsigned P> struct modint{
	unsigned v; using ull=unsigned long long; using Z=modint;
	template<class T> modint(T x=0):v((x%int(P)+int(P))%int(P)){}
	Z operator-()const{return Z(P-v);}
	Z inv()const{return qpow(*this,LL(P)-2);}
	Z&operator+=(Z b){if(v+=b.v,v>=P) v-=P; return *this;}
	Z&operator-=(Z b){return *this+=-b;}
	Z&operator*=(Z b){v=ull(v)*b.v%P; return *this;}
	Z&operator/=(Z b){return *this*=b.inv();}
	friend int raw(const Z&self){return self.v;}
	friend Z qpow(Z a,LL b){Z r=1;for(;b;b>>=1,a*=a) if(b&1) r*=a; return r;}
	friend Z operator+(Z a,Z b){return a+=b;}
	friend Z operator-(Z a,Z b){return a-=b;}
	friend Z operator*(Z a,Z b){return a*=b;}
	friend Z operator/(Z a,Z b){return a/=b;}
};

使用例子:

int main(){
//	#ifdef LOCAL
//	 	freopen("input.in","r",stdin);
//	#endif
	Z a=-1,b=-2;
	printf("%d %d\n",raw(a),raw(b));
	printf("%d\n",raw(a+b));
	printf("%d\n",raw(a-b));
	printf("%d\n",raw(a*b));
	printf("%d\n",raw(a/b));
	printf("%d\n",raw(qpow(a,2)));
	return 0;
}

标签:return,rhs,模板,operator,modint,friend,const
From: https://www.cnblogs.com/caijianhong/p/template-modint.html

相关文章

  • VUE使用模板页面并预留子页面区域
    1.新建模板页面MainLayout.vue,并在template里面防止标签用于嵌入子页面内容<template>'''其他页面内容'''<router-view></router-view>'''其他页面内容'''</template>2.在router的index.js中设置子路由,其中DailyData......
  • tzoj1471 wall(凸包模板题)
    题目大意n个点构成的城堡,给出每个点的坐标。若要修建距离城堡最近距离为L的城墙,问城墙的最短长度。凸包模板题,用Andrew算法求出凸包然后加上半径为L的圆的周长即可。Andrew算法首先对所有点按照y大小进行升序排序,如果y相同就按照x大小升......
  • 最小生成树模板
    prim算法算法思想:每次选定未进入集合中和集合距离最小的点,用该点更新其他点到集合的距离,直到可以判断出不存在最小生成树或所有点均已进入集合下面虽然是两种写法,但是记忆时最好还是按照算法的思路来实现,也就是第2个代码。虽然会多一些边界处理,但是只要我们理解了算法思想即使......
  • 算法模板
    【DFS】classSolution{public:intn;intpath[10000];boolst[10000];voiddfs(intu){if(u==n){for(inti=0;i<n;++i)cout<<path[i]<<"";cout<<endl;return;......
  • 基于模板匹配算法的车牌数字字母识别matlab仿真,带GUI界面
    1.算法理论概述       随着交通工具的普及,车辆数量快速增长,车辆管理变得越来越重要。在车辆管理中,车牌号码的自动识别是一个重要的环节。从传统的手工识别,到现在的自动化识别,车牌识别技术已经成为了一个热门的研究领域。其中,数字字母识别是车牌识别的重要组成部分。本文......
  • SOLIDWORKS工程图模板制作
    为什么要制作工程图模板SOLIDWORKS软件以其优良的技术和市场表现,成为CAD领域一颗耀眼的明星,拥有强大的功能。为了实现更规范、更快捷、更方便、更准确的绘图,制作工程图模板是必要的。SolidWorks工程图的优势在于零件模型的尺寸与工程图相关联,只需修改模型尺寸,工程图中的尺寸也会相......
  • 借助Aspose.Html 将 HTML 模板与 XML 或 JSON 合并
    在现代网络开发中,内容和表示的分离是一个基本原则。HTML模板提供了一种定义网页结构和布局的便捷方法,而JSON和XML数据格式通常用于存储和传输结构化信息。结合这些技术,开发人员可以根据外部源的数据动态生成HTML内容。在这篇博文中,我们将探讨如何在Java中将HTML模板与JS......
  • 洛谷 P3387 【模板】缩点
    在洛谷中查看所有思考都在代码,可以结合代码思考谢谢~#include<bits/stdc++.h>usingnamespacestd;constintN=1e4+5;intn,m,val[N];intdfn[N],low[N],num,col[N],cnt;//col记录每个点属于哪个联通分量//num记录遍历时间cnt记录缩点完后有多少个点in......
  • java根据excel模板填充数据并导出
    部分代码片段<!--导出导入excel--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.12</version></dependency>......
  • Axure通用电商后台管理系高保真交互模板原型图附元件库4种后台模板风格
    Axure通用电商后台管理交互模板原型图附元件库4种后台模板风格,原型中使用4种不同的布局框架,你可以根据自己的需求,去选中对应的菜单排版布局。另外,原型图中使用了较多的交互元件、母版、动态面板,基本还原了真实项目中的交互效果。是一套标准化的后台模板。Axure电商后台管理系高......