NTT裸模板,没什么好解释的

这种高深算法其实也没那么必要知道原理

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define N (1<<17)+10
#define ll long long
using namespace std; ll inv3,invl;
int r[N];
ll A[N],B[N],C[N],mulwn[N],invwn[N];
char s1[N],s2[N];
const ll p=;
ll qpow(ll x,ll y,ll mo){
ll ans=;
while(y){
if(y&) ans=(ans*x)%mo;
x=(x*x)%mo,y>>=;
}return ans;
}
void pre(int len,int l)
{
inv3=qpow(,p-,p),invl=qpow(len,p-,p);
for(int i=;i<len;i++) r[i]=(r[i>>]>>)|((i&)<<(l-));
for(ll i=;i<=len;i<<=) mulwn[i]=qpow(,(p-)/i,p);
for(ll i=;i<=len;i<<=) invwn[i]=qpow(mulwn[i],p-,p);
}
void NTT(ll *a,int len,int type)
{
for(int i=;i<len;i++)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int k=;k<=len;k<<=)
{
ll wn=(type>)?mulwn[k]:invwn[k];
int mid=k>>;
for(int i=;i<len;i+=k)
{
ll w=;
for(int j=;j<mid;j++,w=(w*wn)%p)
{
ll t=(w*a[i+j+mid])%p;
a[i+j+mid]=(a[i+j]-t+p)%p;
a[i+j]=(a[i+j]+t)%p;
}
}
}
if(type==-)
for(int i=;i<len;i++)
a[i]=(a[i]*invl)%p;
}
void NTT_main(ll *a,ll *b,ll *c,int len,int l)
{
NTT(a,len,);NTT(b,len,);
for(int i=;i<len;i++) c[i]=(a[i]*b[i])%p;
NTT(c,len,-);
} int main()
{
int n,len=,l=;scanf("%d",&n);
scanf("%s",s1),scanf("%s",s2);
for(int i=;i<n;i++) A[n-i-]=s1[i]-'';
for(int i=;i<n;i++) B[n-i-]=s2[i]-'';
while(len<n+n) len<<=,l++;
pre(len,l);
NTT_main(A,B,C,len,l);
for(int i=;i<len;i++)
if(C[i]>) C[i+]+=C[i]/,C[i]%=;
int j=len;
while(C[j]==) j--;
while(j>-) printf("%lld",C[j]),j--;
puts("");
return ;
}

模板 NTT 快速数论变换的更多相关文章

  1. NTT 快速数论变换

    NTT 先学习FFT 由于FFT是使用复数运算,精度并不好,而且也无法取模,所以有了NTT(快速数论变换). 建议先完全理解FFT后再学习NTT. 原根 NTT使用与单位根性质相似的原根来代替单位根. ...

  2. [学习笔记]NTT——快速数论变换

    先要学会FFT[学习笔记]FFT——快速傅里叶变换 一.简介 FFT会爆精度.而且浮点数相乘常数比取模还大. 然后NTT横空出世了 虽然单位根是个好东西.但是,我们还有更好的东西 我们先选择一个模数, ...

  3. Algorithm: 多项式乘法 Polynomial Multiplication: 快速傅里叶变换 FFT / 快速数论变换 NTT

    Intro: 本篇博客将会从朴素乘法讲起,经过分治乘法,到达FFT和NTT 旨在能够让读者(也让自己)充分理解其思想 模板题入口:洛谷 P3803 [模板]多项式乘法(FFT) 朴素乘法 约定:两个多 ...

  4. 【算法】快速数论变换(NTT)初探

    [简介] 快速傅里叶变换(FFT)运用了单位复根的性质减少了运算,但是每个复数系数的实部和虚部是一个余弦和正弦函数,因此系数都是浮点数,而浮点数的运算速度较慢且可能产生误差等精度问题,因此提出了以数论 ...

  5. 「算法笔记」快速数论变换(NTT)

    一.简介 前置知识:多项式乘法与 FFT. FFT 涉及大量 double 类型数据操作和 \(\sin,\cos\) 运算,会产生误差.快速数论变换(Number Theoretic Transfo ...

  6. 快速傅里叶变换 & 快速数论变换

    快速傅里叶变换 & 快速数论变换 [update 3.29.2017] 前言 2月10日初学,记得那时好像是正月十五放假那一天 当时写了手写版的笔记 过去近50天差不多忘光了,于是复习一下,具 ...

  7. 多项式乘法(FFT)模板 && 快速数论变换(NTT)

    具体步骤: 1.补0:在两个多项式最前面补0,得到两个 $2n$ 次多项式,设系数向量分别为 $v_1$ 和 $v_2$. 2.求值:用FFT计算 $f_1 = DFT(v_1)$ 和 $f_2=DF ...

  8. 模板 - 数学 - 快速傅里叶变换/快速数论变换(FFT/NTT)

    先看看. 通常模数常见的有998244353,1004535809,469762049,这几个的原根都是3.所求的项数还不能超过2的23次方(因为998244353的分解). 感觉没啥用. #incl ...

  9. 模板 - 数学 - 多项式 - 快速数论变换/NTT

    Huffman分治的NTT,常数一般.使用的时候把多项式的系数们放进vector里面,然后调用solve就可以得到它们的乘积.注意这里默认最大长度是1e6,可能需要改变. #include<bi ...

随机推荐

  1. react阻止无效重渲染的多种方式

    在开发React组件的过程中,我们经常会遇到这个问题:什么情况下组件会重新渲染? 当内部data发生改变,state发生改变(通过调用this.setState()) 以及父组件传过来的props发生 ...

  2. React传递参数的多种方式

    最常见的就是父子组件之间传递参数 父组件往子组件传值,直接用this.props就可以实现 在父组件中,给需要传递数据的子组件添加一个自定义属性,在子组件中通过this.props就可以获取到父组件传 ...

  3. nyoj11-奇偶数分离

    奇偶数分离 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再 ...

  4. 记录python爬取猫眼票房排行榜(带stonefont字体网页),保存到text文件,csv文件和MongoDB数据库中

    猫眼票房排行榜页面显示如下: 注意右边的票房数据显示,爬下来的数据是这样显示的: 网页源代码中是这样显示的: 这是因为网页中使用了某种字体的缘故,分析源代码可知: 亲测可行: 代码中获取的是国内票房榜 ...

  5. HTML乱码问题

    第一:定义网页显示编码.如果不定义网页编码,那么我们浏览网页的时候,IE会自动识别网页编码,这就有可能会导致中文显示乱码了.所以我们做网页的时候,都会用“<meta http-equiv=”Co ...

  6. 在centOS6.5 上安装使用pipework

    需求:镜像生成了2个含有tomcat的容器,用nginx进行负载均衡.但是容器重启后ip会自动改变...所以使用pipework进行分配静态ip pipework安装 OS:centos6.5 第一步 ...

  7. Android漫游记(6)---APP启动之旅(I)

    Android基于Linux2.6+内核,我们看一张图,以对Android系统的架构有个感性的认识. 我们从Kernel层简单说明: 1.Kernel层:基于Linux2.6+内核.同一时候做了一些嵌 ...

  8. 【转】一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    参考这篇文章: http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价 ...

  9. UVA 11426 - GCD - Extreme (II) 欧拉函数-数学

    Given the value of N, you will have to find the value of G. The definition of G is given below:G =i< ...

  10. IOC与DI区别

    (1)IOC:控制反转,把对象创建交给spring进行配置. (2)DI:依赖注入,向类里面的属性中设置值. (3)关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作.