NTT学习笔记(快速数论变换)
一些概念
欧拉函数 ϕ ( n ) \phi(n) ϕ(n)
欧拉函数简介
阶
若 g g g和 n n n互质,则令 g x % n = 1 g^x\%n=1 gx%n=1的最小正整数 x x x称为 g g g模 n n n的阶。
原根
对于互质的两个正整数 g g g和 n n n,如果 g g g模 n n n的阶为 ϕ ( n ) \phi(n) ϕ(n),则称 g g g为 n n n的原根。
求原根
一般的原根都比较小,暴力枚举即可。
NTT
在 F F T FFT FFT中,我们选择 n n n次单位复根作为 x x x的值,因为他们满足消去引理、折半引理、求和引理,所以可以用分治的方法将时间复杂度变为 O ( n log n ) O(n\log n) O(nlogn)。但因为用了复数,所以在精度上有误差。而在一些题目要求的是带模的多项式乘法,所以 F F T FFT FFT就用不了了。那么,我们能不能让 x x x取整数值,使得这个值也能满足消去引理、折半引理、求和引理呢?
设 ϕ ( m ) = r × 2 d \phi(m)=r\times 2^d ϕ(m)=r×2d,令 n = 2 d n=2^d n=2d, x n i = x ϕ ( m ) × i / n ( m o d m ) x_n^i=x^{\phi(m)\times i/n}\pmod m xni=xϕ(m)×i/n(modm),其中 i ≤ n i\leq n i≤n
则 x n i x_n^i xni有以下性质:
1. 消去引理
x d n d k = x n k ( m o d m ) x_{dn}^{dk}=x_n^k\pmod m xdndk=xnk(modm)
证明: x d n d k = x ϕ ( m ) × d k / d n = x ϕ ( m ) × k / n = x n k ( m o d m ) x_{dn}^{dk}=x^{\phi(m)\times dk/dn}=x^{\phi(m)\times k/n}=x_n^k\pmod m xdndk=xϕ(m)×dk/dn=xϕ(m)×k/n=xnk(modm)
2. 折半引理
( x n k + n / 2 ) 2 = x n / 2 k ( m o d m ) (x_n^{k+n/2})^2=x_{n/2}^k \pmod m (xnk+n/2)2=xn/2k(modm)
证明: ( x n k + n / 2 ) 2 = x n 2 k + n = x n 2 k = x n / 2 k ( m o d m ) (x_n^{k+n/2})^2=x_n^{2k+n}=x_n^{2k}=x_{n/2}^k\pmod m (xnk+n/2)2=xn2k+n=xn2k=xn/2k(modm)
3. 求和引理
∑ i = 0 n − 1 ( x n k ) j = 0 ( m o d m ) \sum\limits_{i=0}^{n-1}(x_n^k)^j=0\pmod m i=0∑n−1(xnk)j=0(modm)
证明: ∑ i = 0 n − 1 ( x n k ) j = 1 − ( x n k ) n 1 − x n k = 0 1 − x n k = 0 \sum\limits_{i=0}^{n-1}(x_n^k)^j=\dfrac{1-(x_n^k)^n}{1-x_n^k}=\dfrac{0}{1-x_n^k}=0 i=0∑n−1(xnk)j=1−xnk1−(xnk)n=1−xnk0=0
那么,用 x x x来代替 F F T FFT FFT中的 ω \omega ω,其他不变,就可以求带模数的多项式乘法了。
模数的限制
若模数 m = r × 2 k + 1 m=r\times 2^k+1 m=r×2k+1(其中 r r r为奇数, k k k为整数),则多项式乘积的次数不能超过 2 k 2^k 2k。
如果题目没有模数,那也可以取一个较大的模数,保证答案的每一位都小于这个模数,用这个模数来做 N T T NTT NTT也是可以的。
一些模数的原根
模数 | 原根 | 最大长度 |
---|---|---|
998244353 = 119 × 2 23 + 1 998244353=119\times 2^{23}+1 998244353=119×223+1 | 3 3 3 | 2 23 2^{23} 223 |
469762049 = 7 × 2 26 + 1 469762049=7\times 2^{26}+1 469762049=7×226+1 | 3 3 3 | 2 26 2^{26} 226 |
2281701377 = 17 × 2 27 + 1 2281701377=17\times 2^{27}+1 2281701377=17×227+1 | 3 3 3 | 2 27 2^{27} 227 |
例题
多项式乘法(FFT)
#include<bits/stdc++.h>
using namespace std;
const long long g=3,mod=998244353;
long long w,wn,a1[5000005],a2[5000005];
long long mi(long long t,long long v){if(v==0) return 1;long long re=mi(t,v/2);re=re*re%mod;if(v&1) re=re*t%mod;return re;
}
void ch(long long *a,int l){for(int i=1,j=l/2,k;i<l-1;i++){if(i<j) swap(a[i],a[j]);k=l/2;while(j>=k){j-=k;k>>=1;}j+=k;}
}
void ntt(long long *a,int l,int fl){for(int i=2;i<=l;i<<=1){if(fl==1) wn=mi(g,(mod-1)/i);else wn=mi(g,mod-1-(mod-1)/i);for(int j=0;j<l;j+=i){w=1;for(int k=j;k<j+i/2;k++,w=w*wn%mod){long long t=a[k],u=w*a[k+i/2]%mod;a[k]=(t+u)%mod;a[k+i/2]=(t-u+mod)%mod;}}}if(fl==-1){long long ny=mi(l,mod-2);for(int i=0;i<l;i++) a[i]=a[i]*ny%mod;}
}
int main()
{int n=1,l1,l2;scanf("%d%d",&l1,&l2);++l1;++l2;while(n<l1+l2) n<<=1;for(int i=0;i<l1;i++){scanf("%lld",&a1[i]);}for(int i=0;i<l2;i++){scanf("%lld",&a2[i]);}ch(a1,n);ch(a2,n);ntt(a1,n,1);ntt(a2,n,1);for(int i=0;i<n;i++){a1[i]=a1[i]*a2[i]%mod;}ch(a1,n);ntt(a1,n,-1);for(int i=0;i<l1+l2-1;i++) printf("%lld ",a1[i]);return 0;
}
相关文章:
NTT学习笔记(快速数论变换)
一些概念 欧拉函数 ϕ ( n ) \phi(n) ϕ(n) 欧拉函数简介 阶 若 g g g和 n n n互质,则令 g x % n 1 g^x\%n1 gx%n1的最小正整数 x x x称为 g g g模 n n n的阶。 原根 对于互质的两个正整数 g g g和 n n n,如果 g g g模 n n n的阶为 ϕ ( n ) \phi…...

Android类似微信首页的页面开发教程(Kotlin)二
前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …...
PAt A1015 Reversible Primes
1015 Reversible Primes 分数 20 作者 CHEN, Yue 单位 浙江大学 A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its rever…...
解决Lemuroid识别不到蓝牙键盘的问题
Android系统基于libretro的全能游戏模拟器,目前有RetroArch,Kodi,Lemuroid。 而且这三个都是开源免费的APP。 Lemuroid相对前面两个功能比较简陋。也不能自己下载核心。但代码也是最少的。 在使用Lemuroid的时候,发现它不能检测…...

SpringBoot 使用 Sa-Token 完成权限认证
一、设计思路 所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限: 有,就让你通过。没有?那么禁止访问! 深入到底层数据中,就是每个账号都会拥有一个权限码集合,框架来校验这个集合中是…...

Spring核心与设计思想、创建与使用
文章目录 一、Spring是什么二、为什么要学习框架三、IoC和DI(一)IoC1. 认识IoC2. Spring的核心功能 (二)DI 四、Spring项目的创建(一)使用 Maven 方式创建一个 Spring 项目 五、Spring项目的使用࿰…...
mysql 备份 还原
1:备份 执行命令方案1: /usr/local/mysql/bin/mysqldump -uX -pX -h 127.0.0.1 --set-gtid-purgedOFF --skip-extended-insert --add-drop-table --add-locks --create-options --disable-keys --lock-tables --quick --set-charset -e --max_allowed_packet16777216 --net_b…...

每日学术速递4.26
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AutoNeRF: Training Implicit Scene Representations with Autonomous Agents 标题:AutoNeRF:使用自主代理训练隐式场景表示 作者:Pierre Marz…...
RabbitMQ使用StringRedisTemplate-防止重复消费
造成重复消费的原因: MQ向消费者推送message,消费者向MQ返回ack,告知所推送的消息消费成功。但是由于网络波动等原因,可能造成消费者向MQ返回的ack丢失。MQ长时间(一分钟)收不到ack,于是会向消…...
临沂大学张继群寄语
目录 寄语 1、不能有不良睹好 2、坚毅的个性和勤奋的品质 3、会存钱...
线程学习笔记
1:Thread 线程的生命周期控制 2:Runnable 可执行的任务和程序 3:Callable 执行程序后返回结果 4:Future 收集程序返回结果 5:Executor 线程池 6:ForkJoin 默认线程池 每个线程有工作队列 工作窃取 7:RunnableFuture FutureTask 实现 Runnable 和 Future 执…...

代码随想录算法训练营第四十二天|01背包问题,你该了解这些!、01背包问题,你该了解这些! 滚动数组 、416. 分割等和子集
文章目录 01背包问题,你该了解这些!01背包问题,你该了解这些! 滚动数组416. 分割等和子集 01背包问题,你该了解这些! 题目链接:代码随想录 二维数组解决0-1背包问题 解题思路: 1.dp…...
结构体指针、数组指针和结构体数组指针
结构体指针 首先让我们定义结构体: struct stu { char name[20]; long number; float score[4]; }; 再定义指向结构体类型变量的指针变量: struct stu *student; /*定义结构体类型指针*/ student malloc(sizeof(struct stu)); /*为指针变量分…...
项目架构一些注意点
考虑系统的 稳定性 一、微服务的稳定性 1、如何解决那些不稳定的因素/问题?也是常说的如何容错。 2、一个系统的高可用取决于它本身和其强依赖的组件的高可用 3、消除单点 保活机制 健康检查 注册中心如何保障稳定性 注册中心集群 微服务本身对注册信息的本地持…...

Forefront GPT-4免费版:开启无限畅聊时代,乐享人工智能快感,无限制“白嫖”,还能和N多角色一起聊天?赶紧注册,再过些时间估计就要收费了
目录 前言注册登录方式应用体验聊天体验绘图体验 “是打算先免费后收费吗?”建议其它资料下载 前言 近期,人工智能技术迎来重大飞跃,OpenAI的ChatGPT等工具成为全球数亿人探索提高生产力和增强创造力的新方法。人们现在可以使用人工智能驱动…...

深入浅出 Compose Compiler(1) Kotlin Compiler KCP
前言 Compose 的语法简洁、代码效率非常高,这主要得益于 Compose Compiler 的一系列编译期魔法,帮开发者生成了很多样板代码。但编译期插桩也阻碍了我们对于 Compose 运行原理的认知,想要真正读懂 Compose 就必须先了解它的 Compiler。本系列…...

BatchNormalization和LayerNormalization的理解、适用范围、PyTorch代码示例
文章目录 为什么要NormalizationBatchNormLayerNormtorch代码示例 学习神经网络归一化时,文章形形色色,但没找到适合小白通俗易懂且全面的。学习过后,特此记录。 为什么要Normalization 当输入数据量级极大或极小时,为保证输出数…...

大数据 | 实验二:文档倒排索引算法实现
文章目录 📚实验目的📚实验平台📚实验内容🐇在本地编写程序和调试🥕代码框架思路🥕代码实现 🐇在集群上提交作业并执行🥕在集群上提交作业并执行,同本地执行相比即需修改…...
Java文档注释-JavaDoc标签
标签含义author指定作者{code}使用代码字体以原样显示信息,不处理HTML样式deprecated指定程序元素已经过时{docRoot}指定当前文档的根目录路径exception标识由方法或构造函数抛出的异常{inheritDoc}从直接超类中继承注释{link}插入指向另外一个主题的内联链接{linkp…...

黑盒测试过程中【测试方法】详解5-输入域,输出域,猜错法
在黑盒测试过程中,有9种常用的方法:1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 黑盒测试过程中【测试方法】讲解1-等价类,边界值,判定表_朝一…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

智能照明系统:具备认知能力的“光神经网络”
智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...