FFT NNT
算算劳资已经多久没学新算法了,又要重新开始学辣。直接扔板子,跑。。。话说FFT算法导论里讲的真不错,去看下就懂了。
//FFT
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef __int64 ll;
const double pi = acos(-1.0);
const int N = +;
const double eps = 1e-; struct Complex {
double x,y;
Complex(double _x=,double _y=)
:x(_x),y(_y) {}
Complex operator + (const Complex& tt)const { return Complex(x+tt.x,y+tt.y); }
Complex operator - (const Complex& tt)const { return Complex(x-tt.x,y-tt.y); }
Complex operator * (const Complex& tt)const { return Complex(x*tt.x-y*tt.y,x*tt.y+y*tt.x); }
};
void FFT(Complex *a, int n, int rev) {
// n是大于等于相乘的两个数组长度的2的幂次
// 从0开始表示长度,对a进行操作
// rev==1进行DFT,==-1进行IDFT
for (int i = ,j = ; i < n; ++ i) {
for (int k = n>>; k > (j^=k); k >>= );
if (i<j) swap(a[i],a[j]);
}
for (int m = ; m <= n; m <<= ) {
Complex wm(cos(*pi*rev/m),sin(*pi*rev/m));
for (int i = ; i < n; i += m) {
Complex w(1.0,0.0);
for (int j = i; j < i+m/; ++ j) {
Complex t = w*a[j+m/];
a[j+m/] = a[j] - t;
a[j] = a[j] + t;
w = w * wm;
}
}
}
if (rev==-) {
for (int i = ; i < n; ++ i) a[i].x = (a[i].x/n+eps);
}
}
//NNT
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
typedef __int64 ll;
const double pi = acos(-1.0);
const int N = +;
const double eps = 1e-;
const int MOD = ; int f[N<<]; int pow_mod(int x, int n) {
int ret = ;
while(n) {
if(n&) ret = (ll)ret*x%MOD;
x = (ll)x*x%MOD;
n >>= ;
}
return ret;
} int Top, m1[N<<], m2[N<<]; void FFT(int *a, int n, int rev) {
for(int i = , j = ;i < n; i++) {
for(int k = n>>;k > (j^=k); k >>= ) ;
if(i < j) swap(a[i], a[j]);
}
for(int i = ;i < n; i++) m2[i] = m1[i*(Top/n)];
for(int m = ;m <= n; m <<= ) {
int wm = rev == ? n-n/m : n/m;
for(int i = ;i < n; i += m) {
int w = ;
for(int j = i;j < i+m/; j++) {
int t = (ll)m2[w]*a[j+m/]%MOD;
a[j+m/] = a[j] - t;
if(a[j+m/] < ) a[j+m/] += MOD;
a[j] = a[j] + t;
if(a[j] >= MOD) a[j] -= MOD;
w += wm;
if(w >= n) w -= n;
}
}
}
if(rev == -) {
int inv = pow_mod(n, MOD-);
for(int i = ;i < n; i++) a[i] = (ll)a[i]*inv%MOD;
}
}
FFT NNT的更多相关文章
- 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)
对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...
- 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2978 Solved: 1523[Submit][Status][Di ...
- 为什么FFT时域补0后,经FFT变换就是频域进行内插?
应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...
- CC countari & 分块+FFT
题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...
- ECF R9(632E) & FFT
Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...
- fft练习
数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> ...
- FFT时域与频域的关系,以及采样速率与采样点的影响
首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...
- 【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT
前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行 ...
- FFT
void FFT(complex a[],int n,int fl){ ,j=n/;i<n;i++){ if (i<j) {complex t=a[i];a[i]=a[j];a[j]=t; ...
随机推荐
- codevs 1490 【CTSC2008】 网络管理
题目链接:网络管理 好久没写这种类型的题了--手都生了-- 一句话题意:树上带修改的区间\(k\)大数.这题面怎么有点眼熟 显然树上的题目我们可以先在序列上考虑一下.区间带修改的区间\(k\)大数有两 ...
- [LeetCode] Contains Duplicate 包含重复值
Given an array of integers, find if the array contains any duplicates. Your function should return t ...
- [LeetCode] Maximum Product Subarray 求最大子数组乘积
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- SQL Server数据库设计规范
数据库设计规范 1.简介 数据库设计是指对一个给定的应用环境,构造最优的数据库模式,建立数据库及其他应用系统,使之能有效地存储数据,满足各种用户的需求.数据库设计过程中命名规范很是重要,命名规范合理的 ...
- SQL Server-5种常见的约束
引自:http://www.cnblogs.com/dekevin/p/4772235.html SQLServer 中有五种约束, Primary Key 约束. Foreign Key 约束. U ...
- Linux 安装MySQL
安装配置 [root@iZ28gvqe4biZ ~]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r ...
- Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
使用android studio 时,编译成功但用build apk时却报错 环境: android studio 1.5, jdk1.7 错误:Error:Execution failed for ...
- 【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口
操作系统接口 操作系统的任务是让多个程序共享计算机(资源),并且提供一系列基于计算机硬件的但更有用的服务.操作系统管理并且把底层的硬件抽象出来,举例来说,一个文字处理软件(例如word)不需要关心计算 ...
- Javascript实现时间转换为多少天前
//实现时间转换,这篇文章发布时间为 2016/1/20 19:59:30 文章发表时间戳为:1453291170000于:11月前function getDateDiff(dateTimeStamp ...
- Scrum meeting 记录
本周Scrum Master 侯宇泰 一. 工作完成内容记录 · 陈双: 1. 后端数据库Azure Storage设计 2. Offline 上传Movie信息 3. 主页和配音页面的连接 · 鲍航 ...