传送门

题目翻译:给定两个 \(n\) 次多项式 \(A,B\) 和一个整数 \(C\),求 \(A\times B^C\) 在模 \(x^n\) 意义下的卷积

显然就是个循环卷积,所以只要代入 \(\omega_n^{k}\) 进去求出点值,然后插值就好了

???\(n\) 不是 \(2^k\) 的形式,不能直接 \(NTT\)

怎么办呢?

根据题目性质,可以把 \(n\) 拆成 \(2^{a_1}3^{a_2}5^{a_3}7^{a_4}\) 的形式

这启示我们每次不是每次分成两半而是拆分成 \(3/5/7\) 次,然后再合并点值

设 \(F(x)=\sum a_ix^i,F_r(x)=\sum a_{ip+r}x^i\)

那么 \(F(x)=\sum x^rF(x^p)\)

根据单位复数的性质(消去引理和折半引理)那么

\[F(\omega_n^{an+b})=\sum \omega_{np}^{(an+b)r}F_r(w_n^b)
\]

那么只需要写一个每次分 \(p\) 份的 \(FFT\) 就好了

# include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn(5e5 + 5); int n, c, a[maxn], b[maxn], tmp[maxn], g, pri[233333], tot, pw[2][maxn], mod, r[maxn]; inline int Pow(ll x, int y) {
register ll ret = 1;
for (; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
} inline void Inc(int &x, int y) {
x = x + y >= mod ? x + y - mod : x + y;
} int Dfs(int s, int p, int cur, int blk) {
if (cur == tot + 1) return s + p;
register int nxt;
nxt = blk / pri[cur];
return Dfs(s + nxt * (p % pri[cur]), (p - p % pri[cur]) / pri[cur], cur + 1, nxt);
} inline void DFT(int *p, int opt) {
register int i, j, k, l, q, t, cur;
for (i = 0; i < n; ++i) tmp[r[i]] = p[i];
for (i = 0; i < n; ++i) p[i] = tmp[i], tmp[i] = 0;
for (i = 1, cur = tot; i < n; i *= pri[cur], --cur) {
for (t = i * pri[cur], j = 0; j < n; j += t)
for (k = 0; k < t; k += i)
for (l = 0; l < i; ++l)
for (q = 0; q < pri[cur]; ++q)
Inc(tmp[j + k + l], (ll)pw[opt == -1][n / t * (k + l) * q % n] * p[j + i * q + l] % mod);
for (j = 0; j < n; ++j) p[j] = tmp[j], tmp[j] = 0;
}
if (opt == -1) for (c = Pow(n, mod - 2), i = 0; i < n; ++i) p[i] = (ll)p[i] * c % mod;
} int main() {
register int i, j, x;
scanf("%d%d", &n, &c), mod = n + 1;
for (x = n, i = 2; i * i <= x; ++i)
while (x % i == 0) pri[++tot] = i, x /= i;
if (x > 1) pri[++tot] = x;
for (i = 2; ; ++i) {
for (g = i, j = 1; g && j <= tot; ++j)
if (Pow(g, n / pri[j]) == 1) g = 0;
if (g) break;
}
for (i = 0; i < n; ++i) scanf("%d", &a[i]);
for (i = 0; i < n; ++i) scanf("%d", &b[i]);
pw[0][0] = pw[1][0] = 1, pw[0][1] = g, pw[1][1] = Pow(g, mod - 2);
for (i = 2; i < n; ++i) pw[0][i] = (ll)pw[0][i - 1] * g % mod, pw[1][i] = (ll)pw[1][i - 1] * pw[1][1] % mod;
for (i = 0; i < n; ++i) r[i] = Dfs(0, i, 1, n);
DFT(a, 1), DFT(b, 1);
for (i = 0; i < n; ++i) a[i] = (ll)a[i] * Pow(b[i], c) % mod;
DFT(a, -1);
for (i = 0; i < n; ++i) printf("%d\n", a[i]);
return 0;
}

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

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

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

  2. [CTSC2010]性能优化

    [CTSC2010]性能优化 循环卷积快速幂 两个注意点:n+1不是2^k*P+1形式,任意模数又太慢?n=2^k1*3^k2*5^k3*7^k4 多路分治!深刻理解FFT运算本质:分治,推式子得到从 ...

  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. Dreamweaver_CS6安装及破解文件

    资源下载地址: 链接: https://pan.baidu.com/s/1mhQ5DoO 密码: mnv3 1.下载,安装,先作为试用版安装 可能显示的页面不一样,但是就是安装试用版 2.接受许可协议 ...

  2. P5038 [SCOI2012]奇怪的游戏

    题目链接 题意分析 首先我们需要求的是统一以后的值\(x\) 并且一般的棋盘操作我们都需要黑白染色 那么对于棋盘格子是偶数的情况的话 答案是存在单调性的 因为如果统一之后 两两搭配还是可以再加一个的 ...

  3. 关于Hibernate的一个简单小程序

    本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语 ...

  4. JavaScript执行环境和作用域(链)的那些事

    执行环境 什么是执行环境 提起作用域,我们不得不说说什么是执行环境.执行环境定义了变量或函数有权访问的其他数据,并决定其各自的行为.每一个执行环境都有一个对应的变量对象,这个对象的作用就是保存在环境中 ...

  5. 性能测试 vs 负载测试 vs 压力测试

    在做一些软件测试工作时,常常会被提及性能测试.负载测试.压力测试,这也是在软件测试方面最容易混淆的三个概念.之前和一个测试大牛聊天,他和我说常常面试一些测试人员会问一些这样的问题,大多人认为负载测试等 ...

  6. 钩子编程(HOOK) 屏蔽全部按键、鼠标及系统功能键 (4)

    摘要:上篇文章<钩子编程(HOOK) 安装系统全局钩子>已经具体的解说了全局钩子的安装.本文将增强一下钩子的功能.实现屏蔽全部按键鼠标与系统功能键.要实现这个功能.须要安装两个全局钩子,& ...

  7. mono for android之文件系统与应用程序首选项(转)

    Aside from persistent files, your application might need to store cache data in a file. To do that, ...

  8. css中奇怪的地方

    1.border-color      继承内部元素前景色(color:black.可能对元素本身没有效果) 2.border-style:none;//不仅样式没了,border-width也变为0 ...

  9. wpf 自定义ListView

    1.listview.itemtemplate设置item的外层父元素的控件. 2.listview.template设置item的样式(datatemplate),也可以使用itemcontaine ...

  10. Perl入门

    Perl 是一门开源的脚本语言,由 Larry Wall 所创造,该语言以实用,快速开发为主要目标,与当前流行的面向对象结构化编程有些格格不入,但这并不妨碍 Perl 被广泛流传和使用,世界范围内围绕 ...