EOJ Monthly 2019.11 E. 数学题(反演 + 杜教筛 + 拉格朗日插值)

EOJ Monthly 2019.11

∑i=1n∑a1=1i∑a2=1i∑a3=1i⋯∑ak−1i∑aki[gcd(a1,a2,a3,…,ak−1,ak,i)==1]=∑i=1n∑d∣iμ(d)⌊id⌋k=∑d=1nμ(d)∑d∣i⌊id⌋k=∑d=1nμ(d)∑t=1ndtk\sum_{i = 1} ^{n} \sum_{a_1 = 1} ^{i} \sum_{a_2 = 1} ^{i} \sum_{a_3 = 1} ^{i} \dots \sum_{a_{k - 1}} ^{i} \sum_{a_k} ^{i} [gcd(a_1, a_2, a_3, \dots, a_{k - 1}, a_{k}, i) == 1]\\ = \sum_{i = 1} ^{n} \sum_{d \mid i} \mu(d) \lfloor \frac{i}{d} \rfloor ^ k\\ = \sum_{d = 1} ^{n} \mu(d) \sum_{d \mid i} \lfloor \frac{i}{d}\rfloor ^ k\\ = \sum_{d = 1} ^{n} \mu(d) \sum_{t = 1} ^{\frac{n}{d}} t ^ k\\ i=1na1=1ia2=1ia3=1iak1iaki[gcd(a1,a2,a3,,ak1,ak,i)==1]=i=1ndiμ(d)dik=d=1nμ(d)didik=d=1nμ(d)t=1dntk

然后杜教筛筛出∑i=1nμ(i)\sum\limits_{i = 1} ^{n} \mu(i)i=1nμ(i)的前缀和,用拉格朗日插值得到∑i=1nik\sum\limits_{i = 1} ^{n} i ^ ki=1nik这个式子,再加上数论分块即可完美解决。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;
const double eps = 1e-7;const int N = 1e6 + 10, mod = 998244353;ll fac[N], pre[N], suc[N], inv[N], prime[N], sum[N], mu[N], n, k, cnt;bool st[N];ll quick_pow(ll a, int n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans;
}void init() {sum[1] = mu[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;mu[i] = -1;sum[i] = quick_pow(i, k);}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;sum[i * prime[j]] = 1ll * sum[i] * sum[prime[j]] % mod;if(i % prime[j] == 0) break;mu[i * prime[j]] = -mu[i];}}fac[0] = inv[0] = 1;for(int i = 1; i < N; i++) {mu[i] = (mu[i] + mu[i - 1]) % mod;sum[i] = (sum[i] + sum[i - 1]) % mod;fac[i] = 1ll * fac[i - 1] * i % mod;}inv[N - 1] = quick_pow(fac[N - 1], mod - 2);for(int i = N - 2; i >= 1; i--) {inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;}
}ll solve(ll n) {ll ans = 0;pre[0] = suc[k + 3] = 1;for(int i = 1; i <= k + 2; i++) pre[i] = 1ll * pre[i - 1] * (n - i) % mod;for(int i = k + 2; i >= 1; i--) suc[i] = 1ll * suc[i + 1] * (n - i) % mod;for(int i = 1; i <= k + 2; i++) {ll a = 1ll * pre[i - 1] * suc[i + 1] % mod, b = 1ll * inv[i - 1] * inv[k + 2 - i] % mod;if((k + 2 - i) & 1) b *= -1;ans = ((ans + 1ll * sum[i] * a % mod * b % mod) % mod + mod) % mod;}return ans;
}unordered_map<ll, ll> ans_s;ll S(ll n) {if(n < N) return mu[n];if(ans_s.count(n)) return ans_s[n];ll ans = 1;for(ll l = 2, r; l <= n; l = r + 1) {r = n / (n / l);ans = ((ans - 1ll *(r - l + 1) * S(n / l)) % mod + mod) % mod;}return ans_s[n] = ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);scanf("%lld %lld", &n, &k);init();ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans + 1ll * ((S(r) - S(l - 1)) % mod + mod) % mod * solve(n / l) % mod) % mod;}printf("%lld\n", ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打表

打表 众所周知&#xff0c;打表是一项非常非常重要的技能QAQ 寻找通项&#xff1a;直接观察一元函数或者一些dp值或者sg值的规律注意二进制&#xff1a;有些规律不在10进制下&#xff0c;而是存在于二进制下观察递推关系&#xff1a;有时候无法得到有用的通项&#xff0c;但是…

关于 .Net Core runtimeconfig 文件说明

项目的bin\debug\netcoreapp${Version}下面能够找到这个${AppName}.runtimeconfig.json文件&#xff0c;简单来说&#xff0c;它就是用来定义应用程序所用的共享框架&#xff08;.Net Core App&#xff09;以及运行时选项 的一个文件。一个简单的例子{ "runtimeOptions&q…

F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)

F. Cowmpany Cowmpensation 首先一般dp推导dp[i][j]∏u∈soni∑k1jdp[v][k]dp[i][j] \prod\limits_{u \in son_i} \sum\limits_{k 1} ^{j} dp[v][k]dp[i][j]u∈soni​∏​k1∑j​dp[v][k] 这个是毫无疑问的&#xff0c;然后我们考虑如何得到d≥nd \geq nd≥n的情况。 我们…

P4055 [JSOI2009]游戏(二分图匹配+博弈)

P4055 [JSOI2009]游戏 对于一个网格&#xff0c;上面有一些障碍物不能走&#xff0c;A选择起点&#xff0c;然后B走到相邻的四个格子之一&#xff0c;然后轮流移动不能移动的一方失败。求解所有可以赢的初始位置。 首先对于这个问题要想到网格图上博弈&#xff0c;两个人走的…

net core 3.0 之Grpc新特性小试牛刀

作者&#xff1a; 相信微服务大家伙都有听说和知道&#xff0c;好处弊端咱也不多说了&#xff0c;Grpc算是一个比较全面的微服务框架&#xff0c;也得到微软的支持总结下来就是&#xff0c;跨平台&#xff0c;可靠&#xff0c;通信快&#xff0c;扩展性强&#xff0c;网络消耗小…

Fraction Construction Problem(拓展欧几里德)

Fraction Construction Problem 思路 cd−efab\frac{c}{d} - \frac{e}{f} \frac{a}{b}dc​−fe​ba​ a<b&f<ba < b \& f < ba<b&f<b 1≤1,e≤410121 \leq 1, e \leq 4 \times10 ^{12}1≤1,e≤41012 当b 1时&#xff0c;一定无解。 gcd(a, b…

CF1168D Anagram Paths(由必要到充分/虚树)

CF1168D Anagram Paths 对于这道题首先有一个关键的性质&#xff0c;那就是对于一个树&#xff0c;它是可重排的&#xff0c;当且仅当在树上任意一个节点&#xff0c;所有字母在相关联的字符串中出现次数最大值之和小于当前点到叶子的距离。这个性质可以通过归纳证明&#xff0…

基于Coravel定时任务之计算总页数

在物联网系统中&#xff0c;需要计算底端所有设备的总数&#xff0c;除以分页每页显示数量&#xff0c;进行一个总页数的显示。包括状态&#xff0c;告警&#xff0c;日志等等数据都需要对应的总页数的显示。2.1 TaskSchedulerTaskScheduler库只支持.net&#xff0c;且需要结合…

拉格朗日插值

拉格朗日插值 简要阐述 结论给定n1n 1n1个点最多可以得到一个nnn次多项式的表达式&#xff0c;并且f(x)∑i1nyi∏j∤ix−xjxi−yjf(x) \sum_{i 1} ^{n} y_i \prod\limits_{j \nmid i}\frac{x - x_j}{x_i - y_j}f(x)∑i1n​yi​j∤i∏​xi​−yj​x−xj​​我们随便往里带入…

A Story of One Country (Hard)(中途相遇法/启发式分裂)

A Story of One Country (Hard) https://www.luogu.com.cn/problem/solution/CF1181E2 首先考虑暴力的做法&#xff0c;就是每次排序然后寻找分割点&#xff0c;对分割点左右两边分治处理&#xff0c;但是这样的复杂度是 最坏情况下O(n2logn)O(n^2logn)O(n2logn) 然后我们考…

Docker系列之AspNetCore Runtime VS .NetCore Runtime VS SDK(四)

接下来我们就要慢慢步入在.NET Core中使用Docker的殿堂了&#xff0c;如题在开始之前&#xff0c;我们需要搞清楚一些概念&#xff0c;要不然看到官方提供如下一系列镜像&#xff0c;我们会一脸懵逼&#xff0c;不知道到底要使用哪一个。AspNetCore Runtime VS .NetCore Runti…

HDU 6750 Function(莫比乌斯反演)(2020百度之星初赛1)

Function 推式子 S(n)∑i1n∑d∣id[gcd(d,id)1]∑d1nd∑d∣i[gcd(d,id)1]∑d1nd∑i1nd[gcd(d,i)1]∑d1nd∑i1nd∑k∣gcd(d,i)μ(k)∑k1nμ(k)k∑d1nkd∑i1nk2dtk2d∑t1nnt∑k2∣tμ(k)ktk2∑k1nμ(k)k∑k2∣tnttk2itk2∑k1nμ(k)k∑i1nk2nik2iS(n) \sum_{i 1} ^{n} \sum_{d …

P5170 【模板】类欧几里得算法

P5170 【模板】类欧几里得算法 https://www.cnblogs.com/bztMinamoto/p/10334354.html 对于类欧几里得算法&#xff0c;本质上可以理解为一条直线下的整点个数&#xff0c;是一个矩形区域。 然后将整数部分提出&#xff0c;就可以使得这个直线斜率较小&#xff0c;那么我们就可…

.NET Core跨平台部署于Docker(Centos)- 视频教程

.NET Core跨平台部署于Docker,Docker部署于Centos中&#xff0c;演示跨平台特性&#xff01;以下视频教程&#xff0c;请带上耳机开始聆听往期教程&#xff1a;.NET开发框架(一)-框架介绍与视频演示.NET开发框架(二)-框架功能简述.NET开发框架(三)-高可用服务器端设计.NET开发框…

矩阵快速幂各类题型总结(一般,共轭,1 * n, 矩阵简化)

Reading comprehension 这个不难找出递推式f[n]f[n−1]2f[n−2]1f[n] f[n - 1] 2f[n - 2] 1f[n]f[n−1]2f[n−2]1。 /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h>using namespace std;typedef long long ll;co…

【清华集训2014】Sum)(类欧几里得算法)

【清华集训2014】Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性&#xff0c;然后我们发现这个式子很像是类欧几里得算法&#xff0c;求解一个斜率为无理数直线下的整点个数&#xff0c;然后我们直接对于一般形式求解&#xff0c;那么就是每次利用整数部分将斜率减小…

一本让我多花2倍时间读的书

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「87」篇原创敬上Hi&#xff0c;大家好&#xff0c;我是Z哥。熟悉我的小伙伴应该知道&#xff0c;我平时看书大多都很快&#xff0c;之前还把自己的速读技巧分享给了…

P3355 骑士共存问题(网络流)

P3355 骑士共存问题 经典的最大独立集问题&#xff0c;最大独立集就是最小点覆盖的补集&#xff0c;因为最小点覆盖等于最大匹配&#xff0c;所以最大独立集等于点数减去最大匹配。

[NOI2005]月下柠檬树 (自适应辛普森)

P4207 [NOI2005]月下柠檬树 如图&#xff0c;我们要求的面积就是这些圆形跟梯形的组合&#xff0c;由于投射到地面上&#xff0c;显然有h′htanθh \frac{h}{tan \theta}h′tanθh​&#xff0c;由此我们就可以开始推导这个f(x)f(x)f(x)函数了。 所以转换为我们要推导出直线a…

Kong 1.3发布,原生gRPC代理、上游TLS交叉认证

Kong 1.3 发布了&#xff0c;此版本亮点包括支持原生 gRPC 代理、上游 TLS 交叉认证&#xff0c;以及一系列新功能和性能改进。原生 gRPC 代理越来越多的用户转向微服务架构&#xff0c;并且希望有对原生 gRPC 代理的支持&#xff0c;Kong 1.3 解决了这个问题&#xff0c;为支持…