一个蒙哥马利约减

news/2025/3/30 23:13:51/文章来源:https://www.cnblogs.com/caijianhong/p/18796692

来源:https://www.luogu.com.cn/record/210348683

template<uint32_t mod>struct LazyMontgomeryModInt{using mint=LazyMontgomeryModInt;using i32=int32_t;using u32=uint32_t;using u64=uint64_t;static constexpr u32 get_r(){u32 ret=mod;for(i32 i=0;i<4;++i)ret*=2-mod*ret;return ret;}static constexpr u32 r=get_r();static constexpr u32 n2=-u64(mod)%mod;static_assert(r*mod==1,"invalid, r * mod != 1");static_assert(mod<(1<<30),"invalid, mod >= 2 ^ 30");static_assert((mod&1)==1,"invalid, mod % 2 == 0");u32 a;constexpr LazyMontgomeryModInt():a(0){}constexpr LazyMontgomeryModInt(const int64_t&b):a(reduce(u64(b%mod+mod)*n2)){};static constexpr u32 reduce(const u64&b){return(b+u64(u32(b)*u32(-r))*mod)>>32;}constexpr mint&operator+=(const mint&b){if(i32(a+=b.a-2*mod)<0)a+=2*mod;return*this;}constexpr mint&operator-=(const mint&b){if(i32(a-=b.a)<0)a+=2*mod;return*this;}constexpr mint&operator*=(const mint&b){a=reduce(u64(a)*b.a);return*this;}constexpr mint&operator/=(const mint&b){*this*=b.inverse();return*this;}constexpr mint operator+(const mint&b)const{return mint(*this)+=b;}constexpr mint operator-(const mint&b)const{return mint(*this)-=b;}constexpr mint operator*(const mint&b)const{return mint(*this)*=b;}constexpr mint operator/(const mint&b)const{return mint(*this)/=b;}constexpr bool operator==(const mint&b)const{return(a>=mod?a-mod:a)==(b.a>=mod?b.a-mod:b.a);}constexpr bool operator!=(const mint&b)const{return(a>=mod?a-mod:a)!=(b.a>=mod?b.a-mod:b.a);}constexpr mint operator-()const{return mint()-mint(*this);}constexpr mint pow(u64 n)const{mint ret(1),mul(*this);while(n>0){if(n&1)ret*=mul;mul*=mul;n>>=1;}return ret;}constexpr mint inverse()const{return pow(mod-2);}friend ostream&operator<<(ostream&os,const mint&b){return os<<b.get();}friend istream&operator>>(istream&is,mint&b){int64_t t;is>>t;b=LazyMontgomeryModInt<mod>(t);return(is);}constexpr u32 get()const{u32 ret=reduce(a);return ret>=mod?ret-mod:ret;}static constexpr u32 get_mod(){return mod;}explicit operator u32()const{return get();}};
#define modint LazyMontgomeryModInt
#define mint modint<998244353>

注意它的构造函数是接受 int64_t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906801.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷池WAF磁盘空间告急?手把手教你轻松清理

雷池 WAF 磁盘空间清理指南 一、为什么磁盘会满?——了解空间去哪了 雷池 WAF 在保护你的网站时,会持续记录各种安全数据。主要占用空间的有两大"仓库": 1. 防护日志仓库(数据库)存放内容:攻击记录、人机验证日志、访问统计等 存储位置:默认由 PostgreSQL 数据…

接口测试——jmeter介绍和实战

一、jmeter的介绍 1、jmeter认识2、安装jdk(jmeter是java语言开发的) 填写路径,一般默认路径3、在dos下查看jdk是否成功命令:java -version 查看jdk版本安装成功后4、设置环境变量(1)属性>高级设置>环境变量(2)在系统变量中添加 a、JAVA_HOME b、C:\Program F…

图论建模(2-SAT,网络流)

/我要一步一步往上爬/等待阳光静静看着它的脸/小小的天有大大的梦想/重重的壳裹着轻轻的仰望/ /我要一步一步往上爬/在最高点乘着叶片往前飞/让风吹干流过的泪和汗/总有一天我要属于我的天/2-SAT相关 板子 基本 2-SAT代码inline int calc(int x,int y){ return y ? x + n : x;…

[CF 1906J] Count BFS Graph

前言 注意到这个题没想到点子上, 于是进行记录 思路 分析题目 + 基本性质 不难想到借用 \(\rm{bfs}\) 树来解决 于是深度分析 \(\rm{bfs}\) 树的性质 首先是原图中究竟哪些边影响了 \(\rm{bfs}\) 树 不难发现对于点 \(u\), 对于其 \(\rm{bfs}\) 树上的父亲 \(v\), 对于 \(\rm{b…

Ansible ERROR: Ansible requires the locale encoding to be UTF-8; Detected 936.

语言 区域设置 Beta版:使用Unicode UTF-8提供全球语言支持

DBeaver使用教程

sql语句生成测试数据: 我们在填写测试数据时,一个个人为填写数据,比较耗时,我们可以执行sql语句来帮我们实现这部分: 1.找到我们需要填写测试数据的表,在这里我们以goods为例:2.右键该表,找到控制台:3.输入sql指令,然后执行sql语句: sql语句可以让ai生成,也可以在这…

苍穹外卖技术点

完善登录功能 1 员工表中的密码是明文存储,安全性太低 解决办法对前端提交的明文密码进行MD5加密后再与数据库中的密码进行对比。 利用SPring框架自带的工具类DigestUtilspassword= DigestUtils.md5DigestAsHex(password.getBytes());2 新增员工时,若录入的用户名已存在,抛出…

HackTheBox-Linux-Brainfuck

HTB-Linux-Brainfuck OSCP预备线路box1brainfuck 一、攻击流程:使用nmap进行探测开放端口和服务。 sudo nmap --min-rate=1000 -sT -sC -sV [target]通过上图可以看出,有22端口的ssh服务、25端口的ftp端口、,然后我们将爆出的域名放入host文件中。不过要注意,首先host文件在…

技术篇!Air8201如何使用LuatOS进行电源管理功能~

本文将从系统架构、API接口、实战配置三个维度,解析如何利用LuatOS实现Air8201的智能电源管理,从而延长设备寿命并降低能耗成本。 一、电源管理介绍 电源管理是电子设备中非常重要的一部分,尤其是在移动设备和嵌入式系统中。它直接关系到设备的能效、续航时间和整体性能。以…

一篇搞定!如何使用Luatools工具烧录一个具体的项目到Air780EPM核心板中

在物联网(IoT)项目开发中,将编译好的固件程序成功烧录至目标硬件是决定项目成败的关键环节。本篇文章重点介绍如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。 一、准备好项目文件 在烧录项目文件到Air780EPM开发板之前,你需要准备好以下几种项目文件: 1. 内…

快速上手!Air780EPM:LuatOS物联网开发入门指南~

在物联网开发领域,选择合适的硬件平台与操作系统是项目成功的关键。本文将带领你从零开始,通过详细的步骤与示例代码,掌握Air780EPM与LuatOS的入门开发流程,并深入探讨其核心功能与扩展潜力。 一、必须先要告诉你的一些废话 这里,先要告诉你一些前提条件,虽然听着像是废话…