传送门

题目翻译:给定两个 \(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. Security-OAuth2.0 密码模式之服务端实现

    第一步:配置数据库 ,固定创建三张表 ,OAuth2 框架需要默认使用这三张表 我使用的时Mysql,工具为navcat CREATE TABLE `oauth_access_token` ( `to ...

  2. 【Quartz】一个小Demo

    Quartz是一个优秀的框架,功能强大,用法简单,比如说下面这个例子. (1)引入Jar包 <!-- quartz 模块 --> <dependency> <groupI ...

  3. 40.oracle事务

    一.事务特性 事务必须具备以下四个特性,简称ACID属性 原子性(Atomicity):事务是一个完整的操作.事务的各步操作是不可分割的(原子的):要么都执行,要么都不执行场景:银行转账 A-100 ...

  4. MySQL与Redis实现二级缓存

    redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化, ...

  5. 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 本场 Chat 主要内容: Kafk ...

  6. Web服务器与浏览器的实现原理

    Web服务器与浏览器的实现原理 第一部分 为什么会出现web程序? 单机程序不能共享功能的特性导致了客户机服务器模式的诞生  有一台服务器有特定功能的程序 其他计算机通过客户端程序与服务器交流间接使用 ...

  7. Spark累加器

    spark累计器 因为task的执行是在多个Executor中执行,所以会出现计算总量的时候,每个Executor只会计算部分数据,不能全局计算. 累计器是可以实现在全局中进行累加计数. 注意: 累加 ...

  8. Wi-Fi科普讲稿

    Wi-Fi 从入门到?? 组员:deleted 什么是Wi-Fi Wi-Fi 在中文里又称作"无线热点",是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 80 ...

  9. JavaSwing程序设计(目录)

    一.JavaSwing 概述 JavaSwing 图形界面概述 二.JavaSwing 基本组件 JLabel(标签) JButton(按钮) JTextField(文本框) JPasswordFie ...

  10. hzjs颠覆jquery,按照中国人思维开发的最简洁的JQUERY替代品更简洁更高效

    颠覆jquery,按照中国人思维开发的最简洁的JQUERY替代品 实现了类似JQUERY的选择器最核心的基本功能 如:$('#image2').attr("src") 另外提供了 ...