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. 输出格式: 输出一 ...
随机推荐
- 13.Python略有小成(装饰器,递归函数)
Python(装饰器,递归函数) 一.开放封闭原则 软件面世时,不可能把所有的功能都设计好,再未来的一两年功能会陆续上线,定期更新迭代,软件之前所用的源代码,函数里面的代码以及函数的调用方式一般不 ...
- 如何在 Laravel 中 “规范” 的开发验证码发送功能
什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).Thin ...
- 链家H5项目总结
在此次项目中,使用的是高度百分比.对于适配这一块确实少了很多. 1.如果是用高度百分比的话.则img需要写成这样的样式. img{ width:auto; height:100%; display: ...
- CC02:原串翻转
题目 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量). 给定一个string iniString,请返回一个string,为翻转后的字符串.保证字 ...
- CF920F SUM and REPLACE 线段树
给你一个数组a_i,D(x)为x的约数个数 两种操作: 1.将[l,r]的a_i替换为D(a_i) 2.输出∑a_i ( l <= i <= r ) 当区间最大值<=2时,就不 ...
- Web自动化测试—PO设计模式(三)
test_case目录下面放你要执行的用例 目录结构 ui_auto_test --src --test_case --__init.py --test_login_case --pages --__ ...
- 简单记录下SpringCloud的微服务架构和一些概念
一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...
- AD17笔记
1 铺铜修改后自动重铺设置:在最右下角
- Ubuntu 16.04 server版本开机启动脚本不支持
Ubuntu16.04开机启动的脚本一直不支持,错误用在将开机启动脚本放到了home/usr/的目录下,应该放到/root才能正常启动.#!/bin/sh -e ## rc.local## This ...
- 键盘各键对应的ASCII码值(包括鼠标和键盘所有的键)
ESC键 VK_ESCAPE (27)回车键: VK_RETURN (13)TAB键: VK_TAB (9)Caps Lock键: VK_CAPITAL (20)Shift键: VK_SHIFT ($ ...