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. 输出格式: 输出一 ...
随机推荐
- Java基础--基本规则、语法
一.关键字.保留字.标识符.常量.变量 1.关键字:使用某种语言赋予特殊含义的单词. 2.保留字:没有赋予特殊含义,但以后可能会使用的单词. 3.标识符:自定义的单词,以数字.字母.下划线以及$符组成 ...
- 密码暴力破解工具acccheck使用
title: acccheck categories: Password Attacks tags: [passwords,kali linux,acccheck,infogathering,pass ...
- PHP闭包和匿名函数
概念 闭包和匿名函数在PHP5.3.0中被引入. 闭包 闭包是指创建时封装周围环境的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在.这个概念很难理解,不过没关系,继续看下去就会明白了. 匿 ...
- python——函数重点总结
参数的分类 形参:位置参数.默认参数.*args.命名关键字参数.**kwargs 实参:位置参数.关键字参数 命名关键字参数:定义在*后面的位置参数和默认参数叫作命名关键字参数:用来限制实参必须以关 ...
- 使用JMETER进行REST API测试
我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...
- Django配置文件解释
"""Django settings for first project. Generated by 'django-admin startproject' using ...
- atcoder square869120Contest#3 F 寿司
省选round1的时候dalao的推荐——atcoder的题目码量不大,但很巧妙,题目比较难找,挂个链冷静一下:http://s8pc-3.contest.atcoder.jp/tasks/s8pc_ ...
- windows live writer 安装失败 0x80190194 解决方法
windows live writer已经停止更新,部分安装包无法下载. 改安装windows软件包即可,其中包含windows live writer的安装. 参考: http://jingyan. ...
- sqlsever 判断某个字段出现重复的字母或字符
-------下面使用标量值函数判断 出现重复的个数 create function fn_str_times(@str varchar(1000),--原子符串@indexstr varchar( ...
- JavaScript笔记5-事件
一.概述: 事件是可以被JavaScript侦测到的行为.网页中的每个元素都可以产生某些可以触发JavaScript函数的事件.相当于让标签在满足某种条件的时候,调用指定的方法. 二.常用事件 1:o ...