NTT总结

https://www.luogu.com.cn/problem/P3803

公式:

ω n 1 ≡ g p − 1 n ( m o d p ) \large\omega_n^1\equiv g^{\frac {p-1}n}\pmod p ωn1gnp1(modp)

然后所有单位根运算都可以转成原根了!(前提 p p p 为质数)

p p p 常为 998244353,它的原根 g g g 为 3

实现细节:

  1. IDFT时 g g g 要取逆元 − g = g − 1 = g p -g=g^{-1}=\frac g p g=g1=pg(可以把 g g g 看成单位根然后在单位圆上理解)
  2. 最后除 n n n 要变成乘上 n n n 的逆元
  3. p = 99824435 p=99824435 p=99824435 时, p − 1 = 998244352 = 2 23 × 7 × 17 p-1=998244352=2^{23}\times 7\times 17 p1=998244352=223×7×17,所以可以直接除,此步不用取逆元
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//#define M
#define mo 998244353
#define N 3000010
#define G 3
int n, m, i, j, k, T;
int a[N], b[N], r[N], l; int pw(int a, int b) {int ans=1; while(b) {if(b&1) ans*=a; b>>=1; a*=a; ans%=mo; a%=mo; }return ans; 
}const int invG=pw(G, mo-2); void NTT(int *P, int op) {for(i=0; i<n; ++i) if(i<r[i]) swap(P[i], P[r[i]]); for(i=1; i<n; i<<=1) {int W=pw(op==1 ? G : invG, (mo-1)/(i<<1)); //改动!for(j=0; j<n; j+=(i<<1)) {int w=1; for(k=0; k<i; ++k, w=w*W%mo) { int X=P[j+k], Y=w*P[j+k+i]%mo; P[j+k]=(X+Y)%mo; P[j+k+i]=(X-Y+mo)%mo;}}}
}signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}n=read(); m=read(); for(i=0; i<=n; ++i) a[i]=read(); for(i=0; i<=m; ++i) b[i]=read(); m+=n; for(n=1; n<=m; n<<=1) ++l; for(i=0; i<n; ++i) r[i]=((r[i>>1]>>1)|((i&1)<<l-1)); NTT(a, 1); NTT(b, 1);  for(i=0; i<n; ++i) a[i]*=b[i], a[i]%=mo; NTT(a, -1); k=pw(n, mo-2); for(i=0; i<=m; ++i) printf("%lld ", a[i]*k%mo); return 0;
}

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

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

相关文章

el-select 使用

案例&#xff1a; /* * label : 界面上展示的是哪个字段,我这里需要展示名称 * value : 绑定的字段&#xff0c;一般是id */<el-selectv-model"Form.BillNumber"placeholder"请选择"change"changeValue($event)"><el-optionv-for"…

MySQL数据库开发规范

一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8&#xff0c;必要时候使用utf8mb4 解读&#xff1a; &#xff08;1&#xff09;通用&#xff0c;无乱码风险&#xff0c;汉字3字节&#xff0c;英文1字节 &#xff08;2&#xff09;utf8mb4是utf8的超集&#xff…

ThePASS研究院|以Safe为例,解码DAO国库管理

本研究文章由ThePASS团队呈现。ThePASS是一家开创性的DAO聚合器和搜索引擎&#xff0c;在为DAO提供洞察力和分析方面发挥着关键作用。 Intro 随着去中心化自治组织&#xff08;DAOs&#xff09;的发展&#xff0c;它们被赋予了越来越多的角色和期望。在这种巨幅增长的背景下&…

ToBeWritten之VSOC安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

论文阅读_医疗知识图谱_GraphCare

英文名称: GraphCare: Enhancing Healthcare Predictions with Open-World Personalized Knowledge Graphs 中文名称: GraphCare&#xff1a;通过开放世界的个性化知识图增强医疗保健预测 文章: http://arxiv.org/abs/2305.12788 代码: https://github.com/pat-jj/GraphCare 作…

Mac版JFormDesigner IDEA插件安装(非商业用途)

前言 仅供个人开发者使用&#xff0c;勿用作商业用途。 仅供个人开发者使用&#xff0c;勿用作商业用途。 仅供个人开发者使用&#xff0c;勿用作商业用途。 感觉做了这些年开发&#xff0c;怎么感觉市场越搞越回去了。桌面应用又成主流了&#xff1f; 甲方让做桌面客户端&am…

搭建个人备忘录中心服务memos、轻量级笔记服务

目录 一、源码 二、官网 三、搭建 四、使用 一、源码 GitHub - usememos/memos: A privacy-first, lightweight note-taking service. Easily capture and share your great thoughts. 二、官网 memos - Easily capture and share your great thoughts 三、搭建 docke…

Python Pyecharts 制图

基本图表 - pyecharts - A Python Echarts Plotting Library built with love. from pyecharts import options as opts from pyecharts.charts import Pie from pyecharts.faker import Fakerc (Pie().add("",[list(z) for z in zip(["7室1厅", "5…

QT鼠标控制

文章目录 鼠标状态改变限制鼠标活动区域 鼠标状态改变 void QApplication::setOverrideCursor (const QCursor & cursor,bool replace FALSE ) // 设置应用程序强制光标为 cursor QApplication::restoreOverrideCursor() // 撤销最近一次的设置每一个setOverrideCursor…

MindsDB为许多不支持内置机器学习的数据库带来了机器学习功能

选择平台的首要原则是“靠近数据”,让代码靠近数据是保持低延迟的必要条件。 机器学习,特别是深度学习往往会多次遍历所有数据(遍历一次被称为一个epoch)。对于非常大的数据集来说,理想的情况是在存储数据的地方建立模型,这样就不需要大量的数据传输。目前已经有部分数据…

Java EE 突击 15 - Spring Boot 统一功能处理

Spring Boot 统一功能处理 一 . 统一功能的处理1.1 初级阶段 : 不断重复1.2 中级阶段 : 集成方法1.3 高级阶段 : Spring AOP1.4 超高级阶段 : Spring 拦截器准备工作实现拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理扩展 : 统一访问前缀添加 二 . 统一异常的…

leetcode 2483. Minimum Penalty for a Shop(商店的最少代价)

字符串customers只包含’Y’和’N’两种字母, 表示 i 时刻商店是否有客人来。 如果商店在 i 时刻处于开门状态&#xff0c;Y’的代价是0&#xff0c;N’的代价是1.&#xff08;开门了却没有客人就算损失&#xff09;。 反之&#xff0c;在 i 时刻处于关门状态&#xff0c;N’的…

AssemblyManager 程序集管理器

AssemblyManager 程序集管理器 程序执行中使用反射对框架的搭建有着强大的影响&#xff0c;如何管理程序集方便使用反射获取类型操作对象是本文章的重点 1.AssemblyInfo 对于一个程序集这里使用一个AssemblyInfo对象进行管理 Assembly &#xff1a;对应的程序集AssemblyTyp…

QT(8.30)常用类与组件,实现登录界面

1.作业&#xff1a; 完成一个登录界面(图片未附带): 头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QLineEdit>//行编辑器#include<QIcon>//图标#include<QLabel>//标签#include<QPushButton>//按钮#include<QIc…

lodash常用方法

cloneDeep 克隆 import { cloneDeep&#xff0c;reduce } from lodash; const b {c:1} const a cloneDeep(b)debounce 防抖 import { debounce } from lodash; debounce(() > {}, 300, { trailing: true })()omit方法删除指定属性&#xff0c;返回一个新的对象 import …

如何在Spring Boot应用中使用Nacos实现动态更新数据源

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

mysql:

问题&#xff1a; 如题 参考&#xff1a; mysql8.0 InnoDB引擎修改AUTO_INCREMENT的问题 – 苦太狼 解决方法&#xff1a; use db_dbname; ALTER TABLE k_tablename auto_increment1234; analyze table k_tablename;SELECT AUTO_INCREMENT FROM information_schema.tables WHER…

Prometheus监控(三)架构

文章目录 Prometheus架构图Prometheus生态圈组件Prometheus Serverclient librariesPushgatewayexporterAlartmanager Prometheus架构理解存储计算层采集层应用层 Prometheus架构图 Prometheus生态圈组件 Prometheus Server 主服务器&#xff0c;负责收集和存储时间序列数据 …

发布自己的npm包

1.初始化npm包 npm init 输入npm init后&#xff0c;一路默认即可初始化成功&#xff0c;如下&#xff1a; 初始化成功后会生成一个package.json文件 n&#xff08;以我的文件夹demo-npm-dir为例&#xff09; package.json配置如下&#xff1a; {"name": "n…

容器技术,1. Docker,2. Kubernetes(K8s):

目录 容器技术 1. Docker&#xff1a; 2. Kubernetes&#xff08;K8s&#xff09;&#xff1a; Docker和Kubernetes 容器的主要应用场景有哪些&#xff1f; 容器技术 有效的将单个操作系统的资源划分到孤立的组中&#xff0c;以便更好的在孤立的组之间平衡有冲突的资源使…