http://172.20.6.3/Problem_Show.asp?id=2041

https://blog.csdn.net/ggn_2015/article/details/68922404 代码

https://blog.csdn.net/zz_1215/article/details/40430041 证明

这道题里只用快速幂就好了,抄的代码用的exgcd求的逆元,所以我也用的exgcd(权当复习了,exgcd倒推回去的时候记着只需要联立等式,每次自己推exgcd都会想太多……),其实费马小定理求逆元更方便啊,提供代码的人怎么肥四。

NTT和FFT差不多但是因为是在mod意义下的所以求的单位复根不是很一样(具体见证明和代码),其他地方除了需要mod一下都差不多。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<vector>
#include<complex>
using namespace std;
#define LL long long
const int maxn=;
LL ans[maxn]={},p;
LL a[maxn]={},b[maxn]={};
int rev[maxn]={}; int s,bit;
void exgcd(LL aa,LL bb,LL &x,LL &y){
if(!bb){x=;y=;return;}
exgcd(bb,aa%bb,x,y);
LL z=x;
x=y;y=z-((int)(aa/bb))*y;
}
inline LL getit(LL aa,LL bb){
LL x,y; exgcd(aa,bb,x,y);
x%=bb; while(x<)x+=bb;
return x;
}
inline LL getpow(LL x,LL k){
if(k<){k=-k; x=getit(x,p);}
LL z=;
while(k){
if(k&)z=(z*x)%p;
x=(x*x)%p;
k>>=;
}
return z;
}
inline void getrev(){ for(int i=;i<s;i++)rev[i]=((rev[i>>]>>)|((i&)<<(bit-))); }
inline void fft(LL *c,int n,int dft){
for(int i=;i<=s;i++)if(rev[i]>i)swap(c[i],c[rev[i]]);
for(int step=;step<n;step<<=){
LL w=getpow(,dft*(p-)/(step*));
for(int i=;i<n;i+=step<<){
LL z=;
for(int j=i;j<i+step;j++){
LL x=c[j],y=(c[j+step]*z)%p;
c[j]=(x+y)%p;
c[j+step]=((x-y)%p+p)%p;
z=(z*w)%p;
}
}
}
if(dft==-){
LL nn=getit(n,p);
for(int i=;i<n;i++)c[i]=(c[i]*nn)%p;
}
}
int main(){
//cd cle(0,0);Pi=2.0*acos(0.0);
int l1,l2;p=;
while(~scanf("%d%d",&l1,&l2)){
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(ans,,sizeof(ans));
memset(rev,,sizeof(rev));
for(int i=;i<l1;i++)scanf("%lld",&a[i]);
for(int i=;i<l2;i++)scanf("%lld",&b[i]);
int n=l1+l2-;
bit=;s=; for(;s<n;++bit)s<<=;
getrev();
fft(a,s,);fft(b,s,);
for(int i=;i<s;i++)a[i]=(a[i]*b[i])%p;
fft(a,s,-);
for(int i=;i<n;i++)printf("%d ",a[i]);
printf("\n");
}
return ;
}

JZYZOJ 2041 快速数论变换 NTT 多项式的更多相关文章

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

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

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

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

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

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

  4. [快速数论变换 NTT]

    先粘一个模板.这是求高精度乘法的 #include <bits/stdc++.h> #define maxn 1010 using namespace std; char s[maxn]; ...

  5. 快速数论变换(NTT)小结

    NTT 在FFT中,我们需要用到复数,复数虽然很神奇,但是它也有自己的局限性--需要用double类型计算,精度太低 那有没有什么东西能够代替复数且解决精度问题呢? 这个东西,叫原根 原根 阶 若\( ...

  6. 快速数论变换NTT模板

    51nod 1348 乘积之和 #include <cmath> #include <iostream> #include <cstdio> #include &l ...

  7. 从傅里叶变换(FFT)到数论变换(NTT)

    FFT可以用来计算多项式乘法,但是复数的运算中含有大量的浮点数,精度较低.对于只有整数参与运算的多项式,有时,\(\text{NTT(Number-Theoretic Transform)}\)会是更 ...

  8. 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/常用套路【入门】

    原文链接https://www.cnblogs.com/zhouzhendong/p/Fast-Fourier-Transform.html 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/ ...

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

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

随机推荐

  1. Java大话设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  2. css3 @keyframes用法

    使用@keyframes规则,可以创建动画. 在动画的过程中,可以多次更改css样式的设定. 对于指定的变化:发生时用0%,或关键字“from”和“to”,这与0%和100%相同. 0%:开头动画. ...

  3. Phalcon框架之———— 2.0升级到3.0 问题Model验证问题解决

    Github源码:https://github.com/phalcon/cphalcon/tree/master/phalcon/validation/validator Phalcon 2.0 Mo ...

  4. 【转载】ssh(安全外壳协议)

    http://baike.baidu.com/subview/16184/5909252.htm?fr=aladdin

  5. 8个提高效率的CSS实用工具

    CSS,也就是Cascading Style Sheets,推出于1997年,差不多是17年前,至此为我们开发网页大开方便之门,协助我们制作出一个又一个惊艳绝伦的网站设计和模板,提升了我们的创造能力, ...

  6. 20155218 2006-2007-2 《Java程序设计》第5周学习总结

    20155218 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 java中的错误都会被包装成对象,且是可抛出的. 通常称错误处理为异常处理,程序设计本身的错 ...

  7. Passbook

    CHENYILONG Blog Passbook 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilon ...

  8. 第5月第13天 node cnpm安装 babel

    1. https://nodejs.org/en/download/ http://www.runoob.com/react/react-install.html 2. npm install --s ...

  9. 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer

    1.说明 很多黑客工具的实现是通过对文件进行读写操作的,而文件读写操作实质也是对API函数的调用. 2.相关函数 CreateFile : 创建或打开文件或I/O设备.最常用的I/O设备如下:文件,文 ...

  10. LeetCode(15):三数之和

    Medium! 题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答 ...