DFT :

 1 #include <cstdio>
2 #include <iostream>
3 #include <cmath>
4 #include <complex>
5 typedef double db;
6 typedef long long ll;
7
8 #define com complex<db>
9 using namespace std;
10 const int N=1e5+10;
11 const db pi=acos(-1);
12 int n,h[N*6],M;
13 com q[N*6],r[N*6];
14 com a[N*6];
15 void dft(com *src,int sig) {
16 for (int i=0; i<M; i++) a[h[i]]=src[i]; //蝶形变换的准备
17 for (int m=2; m<=M; m<<=1) { //正在求的组大小
18 int half=m>>1;
19 for (int i=0; i<half; i++) { //求A[i]与A[i+k],先枚举这个方便处理主根
20 com w=com(cos(i*2*pi/m) , sig * sin(i*2*pi/m));
21 //必须一步一求,不然精度会出锅。
22 //由于转移到m,因此按照式子是m次根。
23 for (int j=i; j<M; j+=m) { //第几组
24 int k=j+half;
25 com u=a[j], v=a[k]*w;
26 a[j]=u+v,a[k]=u-v;
27 }
28 }
29 }
30 for (int i=0; i<M; i++) src[i]=a[i];
31 }
32 int main() {
33 //freopen("3617.in","r",stdin);
34 cin>>n;
35 for (int i=0; i<n; i++) scanf("%lf",&q[i].real());
36 for (M=1; M<3*n; M<<=1);
37 for (int i=0; i<2*n-1; i++) {
38 if (i==n-1) r[i]=0; else
39 r[i]=pow(i-(n-1),-2) * (i<n-1?-1:1);
40 }
41 for (int i=0; i<M; i++) h[i]=(h[i>>1]>>1) + ((i&1) * (M>>1));
42 //以次数界-1为长度,翻转二进制
43
44 dft(q,1); dft(r,1);
45 for (int i=0; i<M; i++) q[i]=q[i]*r[i];
46 dft(q,-1);
47 for (int i=n-1; i<n+n-1; i++) printf("%lf\n",q[i].real() / M);
48 //不要忘记除次数界!!!
49 }

NFT:

#include <cstdio>
#include <iostream>
using namespace std;
const int N=4e5+10,mo=998244353,g=3;
typedef long long ll; int n,m,M;
int A[N],B[N],h[N];
ll w[N], iw[N]; ll ksm(ll x,ll y) {
if (y==0) return 1;
if (y==1) return x;
ll t=ksm(x,y>>1);
return t*t%mo*ksm(x,y&1)%mo;
}
void ntt(int *a,int sz,int sig) {
for (int i = 1; i < sz; i++)
h[i] = (h[i>>1]>>1) + (i & 1) * (sz >> 1);
for (int i = 0; i <sz; i++)
if (h[i]<i) swap(a[i],a[h[i]]); for (int m = 1; m < sz; m<<=1) {
int td = M / (m<<1);
for (int i = 0; i < sz; i += (m<<1)) {
for (int j = 0; j < m; j++) {
ll T = a[i+j+m] * (sig == 1 ? w[td * j] : iw[td * j]) % mo;
a[i+j+m] = (a[i+j] - T) % mo;
a[i+j] = (a[i+j] + T) % mo;
}
}
}
} int main() {
freopen("test.in","r",stdin);
cin>>n>>m;;
for (int i=0; i<=n; i++) scanf("%d",&A[i]);
for (int i=0; i<=m; i++) scanf("%d",&B[i]);
for (M=1; M<=n+m; M<<=1);
for (int i=1; i<M; i++)
h[i]=(h[i>>1]>>1) + (i&1) * (M>>1);
ll ww = ksm(3, (mo - 1) / M);
iw[0] = w[0] = 1;
for (int i = 1; i < M; i++) w[i] = w[i-1] * ww % mo;
ww = ksm(ww, mo - 2);
for (int i = 1; i < M; i++) iw[i] = iw[i-1] * ww % mo; ntt(A,M,1);
ntt(B,M,1);
for (int i=0; i<M; i++) A[i]=(ll)A[i]*B[i]%mo;
ntt(A,M,-1);
ll cs=ksm(M,mo-2);
for (int i=0; i<=n+m; i++) printf("%lld ",(A[i]*cs%mo+mo)%mo);
}

 FFT:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=270010;
const double pi=acos(-1.0),eps=1e-4;
struct Complex{
double a,b;
Complex(double a=0.0,double b=0.0):a(a),b(b){}
Complex operator+(const Complex &x)const{return Complex(a+x.a,b+x.b);}
Complex operator-(const Complex &x)const{return Complex(a-x.a,b-x.b);}
Complex operator*(const Complex &x)const{return Complex(a*x.a-b*x.b,a*x.b+b*x.a);}
}A[maxn],B[maxn];
void FFT(Complex*,int,int);
int n,m,N=1;
int main(){
scanf("%d%d",&n,&m);
n++;m++;
while(N<n+m)N<<=1;
for(int i=0;i<n;i++)scanf("%lf",&A[i].a);
for(int i=0;i<m;i++)scanf("%lf",&B[i].a);
FFT(A,N,1);
FFT(B,N,1);
for(int i=0;i<N;i++)A[i]=A[i]*B[i];
FFT(A,N,-1);
for(int i=0;i<n+m-1;i++)printf("%d ",(int)(A[i].a+eps));
return 0;
}
void FFT(Complex *A,int n,int tp){
for(int i=1,j=0;i<n-1;i++){
int k=N;
do{
k>>=1;
j^=k;
}while(j<k);
if(i<j)swap(A[i],A[j]);
}
for(int k=2;k<=n;k<<=1){
Complex wn(cos(-tp*2*pi/k),sin(-tp*2*pi/k));
for(int i=0;i<n;i+=k){
Complex w(1.0,0.0);
for(int j=0;j<(k>>1);j++,w=w*wn){
Complex a(A[i+j]),b(w*A[i+j+(k>>1)]);
A[i+j]=a+b;
A[i+j+(k>>1)]=a-b;
}
}
}
if(tp<0)for(int i=0;i<n;i++)A[i].a/=n;
}

FTT简单入门板子的更多相关文章

  1. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  2. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  3. Okio 1.9简单入门

    Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...

  4. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  5. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  6. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  7. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  8. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

  9. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

随机推荐

  1. Vue & Sentry sourcemaps All In One

    Vue & Sentry sourcemaps All In One vue & sentry & sourcemaps https://docs.sentry.io/plat ...

  2. Laravel Homestead 安装 使用教程详解!

    1 Laravel Homestead 1 安装: 1 下载: http://www.vagrantup.com/downloads.html 1 配置: 1 1 测试: 1 1 ********** ...

  3. Adobe DreamWeaver CC 快捷键

    1 1 ADOBE DREAMWEAVER CC Shortcuts: DREAMWEAVER CC DOCUMENT EDITING SHORTCUTS Select Dreamweaver > ...

  4. OSS & Object Storage Service

    OSS & Object Storage Service Object Storage Service https://en.wikipedia.org/wiki/Object_storage ...

  5. alipay 小程序开发教程

    alipay 小程序开发教程 https://opendocs.alipay.com/mini/00ccmd 或访问开放平台:https://opendocs.alipay.com/mini/00cc ...

  6. useful tools for programmer programming

    useful tools for programmer programming devtools repl & playground https://repl.it/@xgqfrms/ htt ...

  7. 磁盘使用率/文件大小查看指南du & df

    一.前言 磁盘使用率,文件大小查看是我们日常使用命令.这两个是配合使用的,磁盘使用率过高告警了,那么得找到对应的磁盘(df),然后找到对应磁盘下的哪个目录和文件占用了空间(du). df(Disk f ...

  8. [Android搞机]修改build.prop解决类原生无法链接12、13信道wifi问题

    最近xda找包刷了个机,发现没法搜到12.13信道.所有未本地化的类原生都有此问题. root后打开/system/build.prop 可以用 在build.prop中加入以下几句,重启即可连接12 ...

  9. Flex实现左右布局

    html <div class="business-content-1"> <div class="item"> 111 </di ...

  10. 安装vue脚手架

    npm install -g @vue/cli 创建项目 vue create freemall