FFT快速傅里叶变化
纪念人生第一次FFT
前排感谢iamzky,讲解非常详细
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; const int MAXN=;
class BigNum
{
public:
double r,i;
BigNum(double _r=0.0,double _i=0.0){r=_r;i=_i;}
BigNum operator+(const BigNum T){return BigNum(r+T.r,i+T.i);}
BigNum operator-(const BigNum T){return BigNum(r-T.r,i-T.i);};
BigNum operator*(const BigNum T){return BigNum(r*T.r-i*T.i,r*T.i+i*T.r);};
}; void Brc(BigNum *T,int N)
{
int i,j,k;
for(i=,j=N/;i<N-;i++)
{
if(i<j) swap(T[i],T[j]);
k=N/;
while(j>=k)
{
j-=k;
k>>=;
}
if(j<k) j+=k;
}
} void FFT(BigNum *T,int N,int flag)
{
Brc(T,N);
for(int i=;i<=N;i<<=)
{
BigNum wn(cos(*M_PI/i),flag*sin(*M_PI/i));
for(int j=;j<N;j+=i)
{
BigNum w(,);
for(int k=j;k<j+i/;k++)
{
BigNum u=T[k];
BigNum t=w*T[k+i/];
T[k]=u+t;
T[k+i/]=u-t;
w=w*wn;
}
}
}
if(flag==-)
for(int i=;i<N;i++)
T[i].r/=N;
} string s1,s2;
BigNum A[MAXN],B[MAXN],C[MAXN];
int a[MAXN],b[MAXN],sum[MAXN];
int N; int main()
{
cin>>s1>>s2;
int L1=s1.size();
int L2=s2.size();
for(N=;N<max(L1,L2);N<<=);N<<=;
for(int i=;i<L1;i++) a[L1-i-]=s1[i]-'';
for(int i=;i<L2;i++) b[L2-i-]=s2[i]-'';
for(int i=;i<N;i++) A[i]=BigNum(a[i]);
for(int i=;i<N;i++) B[i]=BigNum(b[i]);
FFT(A,N,);FFT(B,N,);
for(int i=;i<N;i++)C[i]=A[i]*B[i];
FFT(C,N,-);
for(int i=;i<N;i++)sum[i]=C[i].r+0.5;
for(int i=;i<N;i++)
{
sum[i+]+=sum[i]/;
sum[i]%=;
}
int l=L1+L2-;
while(sum[l]==&&l>)l--;
for(int i=l;i>=;i--)
cout<<sum[i];
return ;
}
FFT快速傅里叶变化的更多相关文章
- FFT快速傅里叶模板
		FFT快速傅里叶模板…… /* use way: assign : h(x) = f(x) * g(x) f(x):len1 g(x):len2 1. len = 1; while(len < ... 
- 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二       FFT
		2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2978 Solved: 1523[Submit][Status][Di ... 
- 【BZOJ】【2179】FFT快速傅里叶
		FFT 做的第二道用到FFT的……好吧其实还是模板题-_-b 百度上说好像分治也能做……不过像FFT这种敲模板的还是省事=.= /*********************************** ... 
- BZOJ 2179 FFT快速傅里叶
		fft. #include<set> #include<map> #include<ctime> #include<queue> #include< ... 
- [Luogu 1919]【模板】A*B Problem升级版(FFT快速傅里叶)
		Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ... 
- Luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶_FFT
		这其实就是一道裸的FFT 核心思想:把两个数拆成两个多项式用FFT相乘,再反序输出 py解法如下: input() print(int(input())*int(input())) 皮一下hihi f ... 
- 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
		题目来源 吐槽下P3803都是紫题... 真心好写,本想一遍过的...但是 我真是太菜了... #include<bits/stdc++.h> using namespace std; ; ... 
- luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
		模板 嗯 做多项式乘法,进位 没了 #include<cmath> #include<cstdio> #include<cstring> #include<a ... 
- P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
		题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ... 
随机推荐
- Python书写规范
			一.python脚本的规范: 每个脚本都有自己的规范,以下的规范不是强制的,但是规范一下,可以使你的脚本规范.易懂.方便使用. #!/usr/bin/env python # -*- coding: ... 
- linux vim 配置 go 开发环境
			安装vim-go 插件 vim 暂时对golang 还不支持语法高亮,如果用户希望使用vim 开发golang 程序,还需要给vim 安装对应的插件 首先需要安装一个vim-pathogen vim插 ... 
- 基于 Laravel Route 的 ThinkSNS+ Component
			这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ... 
- jQuery EasyUI/TopJUI上传多个附件并可以进行删除操作
			jQuery EasyUI/TopJUI上传多个附件并可以进行删除操作 html <table data-toggle="topjui-datagrid" data-opti ... 
- 从各处收集的switch语句
			重构之重复代码: 1.(重复代码是)语义一致的逻辑 反例:语义一致的逻辑产生了多个实体 缺点:如果你为语义一致的逻辑产生了多个实体,那么当需要修改这个逻辑时,你必须保证同时修改所有的实体,并确保它们是 ... 
- 黑马旅游网 ajax实现html页面共享
- python所有的魔术方法
			据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ... 
- [Android基础]Android四大组件之BroadCast
			BroadCast的定义: 广播是一种订阅--通知 事件,广播接收者向Android系统 register (订阅广播),广播发送者向Adnroid系统 sendBroadCast(发送广播),然后A ... 
- mysql 驱动问题
			转 : https://blog.csdn.net/bloodycuckoo/article/details/51175339 转 : https://blog.csdn.net/u010746431 ... 
- 转 sqlplus/RMAN/lsnrctl 等工具连接缓慢
			AIX上sqlplus /as sysdba rman target / 或者lsnrctl start时或者通过sqlplus system/oracle@orcl这样通过监听连接等方式来登陆 ... 
