[CTSC2010]性能优化

循环卷积快速幂

两个注意点:
n+1不是2^k*P+1形式,任意模数又太慢?n=2^k1*3^k2*5^k3*7^k4

多路分治!深刻理解FFT运算本质:分治,推式子得到从下往上的迭代公式

最后求的是w_n^i的点值

快速幂:

循环卷积快速幂比较特殊,就是G*F,>=n的项的系数加到-n位置上

所以,由于w(n,p+n)=w(n,p),点值相乘直接得到G*F的点值表达

F,B点值,快速幂相乘即可

不用把n扩充系数等。

// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int N=5e5+;
int pri[]={,,,};
int n,mod,C;
int G,GI;
int ci[];
int ad(int x,int y){
return x+y>=mod?x+y-mod:x+y;
}
int qm(int x,int y){
int ret=;
while(y){
if(y&) ret=(ll)ret*x%mod;
x=(ll)x*x%mod;
y>>=;
}
return ret;
}
int dep[],cnt;
void divi(){
int tmp=n;
while(tmp%==) tmp/=,dep[++cnt]=,++ci[];
while(tmp%==) tmp/=,dep[++cnt]=,++ci[];
while(tmp%==) tmp/=,dep[++cnt]=,++ci[];
while(tmp%==) tmp/=,dep[++cnt]=,++ci[];
}
bool che(int x){
for(reg i=;i<;++i){
if(ci[pri[i]]){
if(qm(x,n/pri[i])==) return false;
}
}
return true;
}
void fin(){
G=;
while(!che(G)) ++G;
} int f[N];
int b[N];
int pos[N];
int getpos(int x){
// cout<<" getpos "<<x<<endl;
int len=n,l=;
for(reg i=;i<=cnt;++i){
// cout<<" i "<<i<<" x "<<x<<" ll "<<l<<endl;
int be=(x-l)%dep[i],th=(x-l)/dep[i];
len=len/dep[i];
x=l+len*be+th;
l=x-th;
}
// cout<<" bac "<<x<<endl;
return x;
}
int g[N];
int pw[*N][];
int mem[];
void FFT(int *f,int n,int c){
for(reg i=;i<n;++i) g[i]=f[i];
for(reg i=;i<n;++i) f[pos[i]]=g[i];
int las=;
for(reg i=cnt;i>=;--i){
int p=dep[i];
int st=(mod-)/(las*p);
for(reg l=;l<n;l+=las*p){
for(reg b=;b<las;++b){
for(reg j=;j<p;++j){
mem[j]=;
for(reg i=;i<p;++i){
mem[j]=ad(mem[j],(ll)pw[st*(b+j*las)*i][c]*f[l+b+i*las]%mod);
}
}
for(reg j=;j<p;++j){
f[l+b+j*las]=mem[j];
}
}
}
las*=p;
}
}
int main(){
rd(n);rd(C);mod=n+;
divi();fin();GI=qm(G,mod-);
// cout<<" G "<<G<<" GI "<<GI<<endl;//
pw[][]=pw[][]=;
for(reg i=;i<=*n;++i) pw[i][]=(ll)pw[i-][]*GI%mod,pw[i][]=(ll)pw[i-][]*G%mod;
for(reg i=;i<n;++i) rd(f[i]),f[i]%=mod;
for(reg i=;i<n;++i) rd(b[i]),b[i]%=mod;
for(reg i=;i<n;++i) pos[i]=getpos(i);
// cout<<" pos "<<endl;
// prt(pos,0,n-1);
FFT(f,n,);
// cout<<" ff "<<endl;
// prt(f,0,n-1); FFT(b,n,);
// cout<<" bb "<<endl;
// prt(b,0,n-1); for(reg i=;i<n;++i) f[i]=(ll)f[i]*qm(b[i],C)%mod;
FFT(f,n,);
for(reg i=;i<n;++i){
f[i]=(ll)f[i]*qm(n,mod-)%mod;
printf("%d\n",f[i]);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/3/19 18:42:47
*/

算是对FFT本质的理解吧。

[CTSC2010]性能优化的更多相关文章

  1. Luogu4191:[CTSC2010]性能优化

    传送门 题目翻译:给定两个 \(n\) 次多项式 \(A,B\) 和一个整数 \(C\),求 \(A\times B^C\) 在模 \(x^n\) 意义下的卷积 显然就是个循环卷积,所以只要代入 \( ...

  2. Luogu4191 [CTSC2010]性能优化【多项式,循环卷积】

    题目描述:设$A,B$为$n-1$次多项式,求$A*B^C$在系数模$n+1$,长度为$n$的循环卷积. 数据范围:$n\leq 5*10^5,C\leq 10^9$,且$n$的质因子不超过7,$n+ ...

  3. 【Luogu4191】[CTSC2010] 性能优化

    题目链接 题意简述 求循环卷积意义下的 \(A(x)*B(x)^C\). 模数为 n+1 ,长度为 n. Sol 板子题. 循环卷积可直接把点值快速幂来解决. 所以问题就是要快速 \(DFT\),由于 ...

  4. 01.SQLServer性能优化之----强大的文件组----分盘存储

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...

  5. 03.SQLServer性能优化之---存储优化系列

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概  述:http://www.cnblogs.com/dunitian/p/60413 ...

  6. Web性能优化:What? Why? How?

    为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...

  7. Web性能优化:图片优化

    程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...

  8. C#中那些[举手之劳]的性能优化

    隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...

  9. JavaScript性能优化

    如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度. 这种情况下决定程序速度的另一个重要因素就是代码本身. 在这里我们会分门别类的介绍J ...

随机推荐

  1. Windows10 等 administrator 打开IE 或者edge的方法

    gpedit.msc 组策略处理即可

  2. The New Villa

    题目:The New Villa 题目链接:http://poj.org/problem?id=1137 题目大意: 一个人买了一个别墅,里面有很多房间,特别的是这个别墅的房间里灯的开关是乱套的,也就 ...

  3. 高并发之API接口限流

    在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再 ...

  4. java类型的小知识List 等

    List 复制之 浅拷贝与深拷贝 详细连接https://blog.csdn.net/never_tears/article/details/79067245 java中判断字符串是否为数字的方法的几 ...

  5. Windows环境下在IDEA编辑器中spark开发安装步骤

    以下是windows环境下安装spark的过程: 1.安装JDK(version:1.8.0.152) 2.安装scala(version:2.11/2.12) 3.安装spark(version:s ...

  6. 在linux系统中实现各项监控的关键技术(1)--cpu使用率的计算

    转载自 Linux中通过/proc/stat等文件计算Cpu使用率 http://www.blogjava.net/fjzag/articles/317773.html proc文件系统 /proc文 ...

  7. 一个加载时带动画效果的ListBoxItem

    今天我们来谈一下ListBoxItem这个控件,ListBoxItem是直接从ContentControl继承而来的,所以可以添加到任何具有Content属性的控件中去,常见的ListBoxItem可 ...

  8. mongodb3的使用

    1.在windows下载安装mongodb 将下载好的zip压缩文件解压并重命名为mongo-3.0.6,并在根目录下新建文件夹data用于存放数据 2.启动mongod守护进程 使用命令mongod ...

  9. 设置和安装 BizTalk Server 2016 的必备组件

    设置服务器,然后安装和配置软件必备组件. 加入本地管理员组       若要安装并配置 BizTalk Server,在本地计算机上使用管理员帐户登录到服务器. 向本地管理员组添加任何管理 BizTa ...

  10. 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件

    在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件  当触发事件时候 会把当前的dom传给该方法