博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多项式全家桶
阅读量:7289 次
发布时间:2019-06-30

本文共 3600 字,大约阅读时间需要 12 分钟。

Include

多项式乘法(* *=)

多项式求逆(~  Inv)

多项式除法(/)

多项式取模(%)

多项式对数函数(Ln)

多项式指数函数(Exp)

多项式正弦函数(Cos)

多项式余弦函数(Sin)

 

upda:2019.4.28:

对于任意模数NTT全部适用。

位于:namespace FastFourierTransform

 

开启方法:

 

1.取消注释 using namespace FastFourierTransform;

2.把//dele start here/* 到// delete end here */ 删除或者注释掉。

或者,直接把'/*'敲回车打下去即可。

后面的乘法和求逆都直接调用FastFourierTransform中内置的了。

 

#include
#define reg register int#define il inline#define fi first#define se second#define mk(a,b) make_pair(a,b)#define numb (ch^'0')using namespace std;typedef long long ll;template
il void rd(T &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);}template
il void output(T x){
if(x/10)output(x/10);putchar(x%10+'0');}template
il void ot(T x){
if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}template
il void prt(T a[],int st,int nd){
for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}//--------------------------------------------------------------------------------------------------------------------//namespace Miracle{const int mod;const int G=3;const int GI=332748118;const int I=86583718;const int iv2=499122177;const double Pi=acos(-1);il int qm(int x,int y){
int ret=1;while(y){
if(y&1) ret=(ll)ret*x%mod;x=(ll)x*x%mod;y>>=1;}return ret;}il int ad(int x,int y){
return x+y>=mod?x+y-mod:x+y;}il int sub(int x,int y){
return ad(x,mod-y);}il int mul(int x,int y){
return (ll)x*y%mod;}namespace Polynomial{struct Poly{ vector
f; Poly(){f.clear();} il int &operator[](const int &x){ return f[x];} il const int &operator[](const int &x) const { return f[x];} il void resize(const int &n){f.resize(n);} il int size() const { return f.size();} il void cpy(Poly &b){f.resize(b.size());for(reg i=0;i<(int)f.size();++i)f[i]=b[i];} il void rev(){reverse(f.begin(),f.end());} il void clear(){f.clear();} il void read(const int &n){f.resize(n);for(reg i=0;i
il void rev(T &f){ int lp=f.size(); if(R.size()!=f.size()) { R.resize(f.size()); for(reg i=0;i
>1]>>1)|((i&1)?lp>>1:0); } } for(reg i=0;i
f; Cps(){f.clear();} il cplx &operator[](const int &x){ return f[x];} il const cplx &operator[](const int &x) const { return f[x];} il void resize(const int &n){f.resize(n);} il int size() const { return f.size();} il void cpy(Cps &b){f.resize(b.size());for(reg i=0;i<(int)f.size();++i)f[i]=b[i];} il void rev(){reverse(f.begin(),f.end());} il void clear(){f.clear();} il void out(){ for(reg i=0;i<(int)f.size();++i){ cout<<"("<
<<","<
<<") "; }cout<
0?W[n/p*(k-l)]:!W[n/p*(k-l)]); f[k+len]=f[k]-tmp; f[k]=f[k]+tmp; } } } if(c==-1){ for(reg i=0;i
>15;a[i].y=F[i]&32767; } for(reg i=0;i
>15;b[i].y=G[i]&32767; } prework(len); FFT(a,1);FFT(b,1); cplx ka,kb,ba,bb; cplx aaa=cplx(0.5,0),bbb=cplx(0,-0.5),o=cplx(0,1); for(reg i=0;i
>1); Poly tmp=h,t; t.resize(n); for(reg i=0;i
>1),t; int m=init(n*2); t.resize(m); for(reg i=0;i
=1;--i){f[i]=mul(f[i-1],qm(i,mod-2));}f[0]=0;return f;}il Poly Diff(Poly f){ int st=f.size();for(reg i=0;i
>1); g.resize(n); g=g*(((Ln(g)*(mod-1))+1)+f); g.resize(n); return g;}il Poly Exp(const Poly &f){ return Exp(f,f.size());}il Poly Cos(const Poly &f){ Poly g=Exp(f*I);return (g+(~g))*iv2;}il Poly Sin(const Poly &f){ Poly g=Exp(f*I);return (g-(~g))*qm(ad(I,I),mod-2);}int main(){ return 0;}}signed main(){ Miracle::main(); return 0;}/* Author: *Miracle* Date: 2019/4/8 18:57:00*/

 

 

持(yi)续(ding)更(bu)新(gu)~

 

转载于:https://www.cnblogs.com/Miracevin/p/10674814.html

你可能感兴趣的文章
Python介绍
查看>>
Scrum立会报告+燃尽图(十月十二日总第三次):视频相关工作
查看>>
Git 的安装和创建版本库 。
查看>>
霍夫线变换
查看>>
微积分重点:第十六至十八课
查看>>
TCP/IP的ICMP协议,端口号,TCP建立连接的3次握手
查看>>
二分查算法
查看>>
Django 框架之前
查看>>
java的几种基本的排序算法
查看>>
Node js复习(1)----简单的Node服务器搭建
查看>>
[ZJOI2011]细胞——斐波那契数列+矩阵加速+dp
查看>>
「PKUWC2018」Slay the Spire
查看>>
658. Find K Closest Elements
查看>>
强引用、软引用、弱引用、虚引用有什么区别
查看>>
Go语言入门
查看>>
linux 删除文件名带括号的文件
查看>>
laravel 图片裁剪
查看>>
laravel 观察器 模型绑定 方法的关系
查看>>
Android错误之New package not yet registered with the system
查看>>
canvas-6shadow.html
查看>>