[模板]取模整形
时间:2021-09-06
本文章向大家介绍[模板]取模整形,主要包括[模板]取模整形使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
基于这篇帖子。
就只是一个十分简易的模板,连标题都不想打了。
值得注意的是,当有多个整形先乘的时候,不能保证不爆 int
,所以使用它的时候最好全部都定义成它。
/**
* @param MOD used for modulo
* @param RT the primitive root of @p MOD
*/
template<int MOD, int RT> struct mint {
int val;
static const int mod=MOD;
mint(ll v=0) { val=int(-mod<v && v<mod? v: v%mod); if(val<0) val+=mod; }
inline friend bool operator ==(const mint& a, const mint& b) { return a.val == b.val; }
inline friend bool operator !=(const mint& a, const mint& b) { return !(a==b); }
inline friend bool operator <(const mint& a, const mint& b) { return a.val<b.val; }
inline friend bool operator >(const mint& a, const mint& b) { return a.val>b.val; }
inline friend bool operator <=(const mint& a, const mint& b) { return a.val<=b.val; }
inline friend bool operator >=(const mint& a, const mint& b) { return a.val>=b.val; }
inline mint& operator +=(const mint& rhs) { return (*this)=mint((*this).val+rhs.val); }
inline mint& operator -=(const mint& rhs) { return (*this)=mint((*this).val-rhs.val); }
inline mint& operator *=(const mint& rhs) { return (*this)=mint(1ll*(*this).val*rhs.val); }
inline mint operator -() const { return mint(-val); }
inline mint& operator ++() { return (*this)=(*this)+1; }
inline mint& operator --() { return (*this)=(*this)-1; }
inline friend mint operator +(mint a, const mint& b) { return a+=b; }
inline friend mint operator -(mint a, const mint& b) { return a-=b; }
inline friend mint operator *(mint a, const mint& b) { return a*=b; }
inline friend mint qkpow(mint a, ll n) {
mint ret=1; assert(n>=0);
for(; n; n>>=1, a*=a) if(n&1) ret*=a;
return ret;
}
inline friend mint inverse(mint a) { assert(a!=0); return qkpow(a, mod-2); }
};
using Mint=mint<998244353, 5>;
inline ostream& operator <<(ostream& os, Mint a) { os<<a.val; return os; }
原文地址:https://www.cnblogs.com/Arextre/p/15234465.html
- 数据结构 链表改进
- 数据结构 栈&队列
- 终端品牌域名过期被拍卖 价值六位数
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- ASP.NET的路由系统:路由映射
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
- ASP.NET的路由系统:URL与物理文件的分离
- 使用Excel分析CloudStack使用记录
- 卷积神经网络初探索
- TensorFlow 深度学习笔记 逻辑回归 实践篇
- 黑客是如何实施暴力破解的?
- Python的初学者你现在可以自己“看”到代码的运行了!
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Borg:Google集群管理大杀器
- 一文了解Zookeeper
- 【投稿】刀哥:Rust学习笔记 4
- Spring Boot 运行源码剖析
- Spring Boot 特性之 Lazy
- Spring Boot 特性之 Banner
- Spring Boot 特性之 Fluent Builder API
- 一文搞懂 Flink Timer
- DATE类型的“小陷阱”
- 简单聊下 Java Agent
- Byte Buddy 基础知识
- 两种在SAP Cloud Application Studio里通过编程对C4C UI字段赋值的方法
- 如何使用 BTrace v.2.0.1
- 三分钟写一个 Java 多线程
- 使用纯粹的ABAP位操作实现两个整数相加