HDU 6340 Problem I. Delightful Formulas(伯努利数 + 积性函数反演)
Problem I. Delightful Formulas
由此我们得到一个卷积得形式,可O(klogk)O(k \log k)O(klogk)求解。
#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10, mod = 998244353;int r[N], t[N], B[N], b[N], fac[N], ifac[N];int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * a * ans % mod;}a = 1ll * a * a % mod;n >>= 1;}return ans;
}void get_r(int lim) {for (int i = 0; i < lim; i++) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);}
}void NTT(int *f, int lim, int rev) {for (int i = 0; i < lim; i++) {if (i < r[i]) {swap(f[i], f[r[i]]);}}for (int mid = 1; mid < lim; mid <<= 1) {int wn = quick_pow(3, (mod - 1) / (mid << 1));for (int len = mid << 1, cur = 0; cur < lim; cur += len) {int w = 1;for (int k = 0; k < mid; k++, w = 1ll * w * wn % mod) {int x = f[cur + k], y = 1ll * w * f[cur + mid + k] % mod;f[cur + k] = (x + y) % mod, f[cur + mid + k] = (x - y + mod) % mod;}}}if (rev == -1) {int inv = quick_pow(lim, mod - 2);reverse(f + 1, f + lim);for (int i = 0; i < lim; i++) {f[i] = 1ll * f[i] * inv % mod;}}
}void polyinv(int *f, int *g, int n) {if (n == 1) {g[0] = quick_pow(f[0], mod - 2);return ;}polyinv(f, g, n + 1 >> 1);for (int i = 0; i < n; i++) {t[i] = f[i];}int lim = 1;while (lim < 2 * n) {lim <<= 1;}get_r(lim);NTT(t, lim, 1);NTT(g, lim, 1);for (int i = 0; i < lim; i++) {int cur = (2 - 1ll * g[i] * t[i] % mod + mod) % mod;g[i] = 1ll * g[i] * cur % mod;t[i] = 0;}NTT(g, lim, -1);for (int i = n; i < lim; i++) {g[i] = 0;}
}void init() {fac[0] = 1;for (int i = 1; i < N; i++) {fac[i] = 1ll * fac[i - 1] * i % mod;}ifac[N - 1] = quick_pow(fac[N - 1], mod - 2);for (int i = N - 2; i >= 0; i--) {ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;}int n = 1e5 + 10, len = 1;for (int i = 0; i < n; i++) {B[i] = ifac[i + 1];}polyinv(B, b, n);for (int i = 0; i < n; i++) {B[i] = 1ll * b[i] * fac[i] % mod;b[i] = 0;}B[1] = mod - B[1];
}int k, m, n, a[N], num[N], c[N], d[N], pw[N];void polymult(int *a, int n, int *b, int m) {int lim = 1;while (lim < n + m) {lim <<= 1;}get_r(lim);for (int i = n; i < lim; i++) {a[i] = 0;}for (int i = m; i < lim; i++) {b[i] = 0;}NTT(a, lim, 1), NTT(b, lim, 1);for (int i = 0; i < lim; i++) {a[i] = 1ll * a[i] * b[i] % mod;}NTT(a, lim, -1);
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T;scanf("%d", &T);while (T--) {scanf("%d %d", &k, &m);n = 1;for (int i = 1; i <= m; i++) {scanf("%d %d", &a[i], &num[i]);n = 1ll * n * quick_pow(a[i], num[i]) % mod;}int lim = 1;while (lim < k * 2 + 10) {lim <<= 1;}for (int i = 0; i <= lim; i++) {c[i] = d[i] = 0;}for (int i = 0; i <= k; i++) {c[k + 1 - i] = 1ll * fac[k] * ifac[i] % mod * B[i] % mod;}int pow = 1;for (int i = 1; i <= k + 2; i++) {pow = 1ll * pow * n % mod;d[k + 2 - i] = 1ll * pow * ifac[i] % mod;}polymult(c, lim, d, lim);for (int i = 1; i <= m; i++) {pw[i] = quick_pow(a[i], mod - 2);}int ans = 0;for (int d = -1; d <= k; d++) {int gg = 1ll * c[d + k + 2] * B[d + 1] % mod * ifac[d + 1] % mod;for (int i = 1; i <= m; i++) {gg = 1ll * gg * (1 - pw[i] + mod) % mod;pw[i] = 1ll * pw[i] * a[i] % mod;}ans = (ans + gg) % mod;}printf("%d\n", ans);}return 0;
}
HDU 6340 Problem I. Delightful Formulas(伯努利数 + 积性函数反演)相关推荐
- POJ-2480 Longge's problem 积性函数
题目链接:http://poj.org/problem?id=2480 题意:多次求sigma(gcd(i,n), 1<=i<=n<2^32) 这题不能直接搜了,需要考虑函数的性质. ...
- POJ 2480 Longge#39;s problem 积性函数
题目来源:POJ 2480 Longge's problem 题意:求i从1到n的gcd(n, i)的和 思路:首先假设m, n 互质 gcd(i, n*m) = gcd(i, n)*gcd(i, m ...
- HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
实在太长了直接放题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6134 这题就是求 考虑当Gcd(i, j)==1时,除了j为1的情况,其它时候i/j一 ...
- CCPC-2017 杭州站B丨HDU - 6265丨数论丨积性函数 丨欧拉函数丨狄利克雷卷积丨思维变换
[参考博客]@WJHKDGHP ccpc2017杭州站 B [参考博客]@灬从此以后灬 2017 CCPC 杭州 HDU6265B 积性函数 特别感谢以上两位博主,让我看懂了许多细节. 交题网址(HD ...
- 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 【数学专题】莫比乌斯反演与积性函数
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 莫比乌斯反演 AcWing 2702. problem b AcWing 1358. 约数个数和(莫 ...
- 浅谈积性函数求前缀和
转载至https://blog.csdn.net/skywalkert/article/details/50500009 前置技能 积性函数的定义 若f(n)f(n)的定义域为正整数域,值域为复数,即 ...
- 2018ACM-ICPC南京赛区网络赛: J. Sum(积性函数前缀和)
J. Sum A square-free integer is an integer which is indivisible by any square number except 11. For ...
- 积性函数性质-POJ2480
https://vj.xtuacm.cf/contest/view.action?cid=146#problem/D 参考:http://www.cnblogs.com/xiaowuga/p/7161 ...
最新文章
- 比特币ABC推出最新版本后讨论网络不兼容性
- via浏览器下载路径_Via - 能够安装脚本插件的安卓浏览器
- **Java有哪些悲观锁的实现_80% 人不知道的 Redis 分布式锁的正确实现方式(Java 版)...
- python 内置函数__name__的作用
- spring boot 整合redis实现session共享
- xxxx must either be declared abstract or implement abstract method ‘map(T)‘ in ‘MapFunction‘
- 00004-括号匹配问题-牛客网-要考虑各种情况
- xml引入约束示例(xsd文件)
- 切片 里面包含interface_Golang的数组和切片
- 用python语言写一个简单的计算器
- scoope导入数据_scoop导入数据从mysql到hive
- LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义
- Zuul使用Ribbon配置自动重试
- win10 专业版安装系统
- dockerfile
- 计算机网络:数字签名与数字证书
- Kaggle项目之Mobile App Store
- “第五空间”智能安全大赛部分WP
- python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
- Oracle查看表触发器
热门文章
- 面对焦虑,我们能做什么?
- 可以自发热的袜子,穿上暖3.9℃,这个冬天不再怕脚冷!
- 每日一笑 | 对不起,我还没下班...
- 世界头号毒枭古斯曼被捕,全因被内部IT男出卖!
- 想入门平均月薪2.58w人工智能领域?看看BAT的工程师在学什么
- 老板啥都懂,还天天套路我?!
- 2017新生儿爆款名字出炉!90后的父母们最受欢迎的居然是.....
- 提升树算法总结(一)
- mysql 1054 42s22_MySQL ERROR 1054(42S22)
- mysql老叶博客_MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】