#3328. PYXFIB(单位根反演)

#3328. PYXFIB

∑i=0⌊nk⌋Cni×k×Fi×k∑i=0nCni×Fi×[i≡0(modk)]i≡0(modk),单位根反演有1k∑j=0k−1wkij1k∑i=0nCni×Fi∑j=0k−1wkij\sum_{i = 0} ^{\lfloor \frac{n}{k} \rfloor} C_{n} ^{i \times k} \times F_{i \times k}\\ \sum_{i = 0} ^{n} C_n ^{i} \times F_i \times [i \equiv 0 \pmod k]\\ i \equiv 0 \pmod k,单位根反演有 \frac{1}{k} \sum_{j = 0} ^{k - 1} w_k ^ {ij}\\ \frac{1}{k}\sum_{i = 0} ^{n} C_n ^ i \times F_i \sum_{j = 0} ^{k - 1} w_k ^{ij}\\ i=0knCni×k×Fi×ki=0nCni×Fi×[i0(modk)]i0(modk)k1j=0k1wkijk1i=0nCni×Fij=0k1wkij
由于FiF_iFi为斐波那契数列的第iii项,构造矩阵A=[1101]A = [_1 ^ 1\ _0 ^ 1]A=[11 01],则有Ai[0][0]A ^ i[0][0]Ai[0][0]FiF_iFi∑i=0nCni×Fi=(I+A)n\sum\limits_{i = 0} ^{n}C_n ^ i \times F_i = (I + A) ^ ni=0nCni×Fi=(I+A)n
1k∑i=0n∑j=0k−1Cni×Ai×wkij1k∑j=0k−1(A×wkj+I)n\frac{1}{k} \sum_{i = 0} ^{n} \sum_{j = 0} ^{k - 1} C_{n} ^ i \times A ^ i \times w_{k} ^ {ij}\\ \frac{1}{k}\sum_{j = 0} ^{k - 1}(A \times w_k ^ j + I) ^ n\\ k1i=0nj=0k1Cni×Ai×wkijk1j=0k1(A×wkj+I)n

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")using namespace std;int n, k, mod;int dec(int a, int b) {return a >= b ? a - b : a + mod - b;
}int add(int a, int b) {return a + b >= mod ? a + b - mod : a + b;
}namespace min_25 {const int N = 1e6 + 10;int a[N], id1[N], id2[N], prime[N], g1[N], s[N], sum1[N], sum[N], m, cnt, T, wn;bool st[N];inline int ID(int x) {return x <= T ? id1[x] : id2[n / x];}void pre() {T = sqrt(n + 0.5);for (int i = 2; i <= T; i++) {if (!st[i]) {prime[++cnt] = i;sum1[cnt] = sum1[cnt - 1] + 1;}for (int j = 1; j <= cnt && 1ll * i * prime[j] <= T; j++) {st[i * prime[j]] = 1;if (i % prime[j] == 0) {break;}}}for (int l = 1, r; l <= n; l = r + 1) {r = n / (n / l);a[++m] = n / l;a[m] <= T ? id1[a[m]] = m : id2[n / a[m]] = m;g1[m] = a[m] - 1;}for (int j = 1; j <= cnt && 1ll * prime[j] * prime[j] <= n; j++) {for (int i = 1; i <= m && 1ll * prime[j] * prime[j] <= a[i]; i++) {g1[i] = dec(g1[i], dec(g1[ID(a[i] / prime[j])], sum1[j - 1]));}}}void init() {for (int i = 1; i <= cnt; i++) {sum[i] = add(sum[i - 1], wn);}for (int i = 1; i <= m; i++) {s[i] = 1ll * g1[i] * wn % mod;}for (int j = cnt; j >= 1; j--) {for (int i = 1; i <= m && 1ll * prime[j] * prime[j] <= a[i]; i++) {for (int cur = prime[j], w = wn; 1ll * cur * prime[j] <= a[i]; cur *= prime[j], w = 1ll * w * wn % mod) {s[i] = add(s[i], add(1ll * dec(s[ID(a[i] / cur)], sum[j]) * w % mod, 1ll * wn * w % mod));}}}}int solve(int n) {return n ? s[ID(n)] + 1 : 0;}
}int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * ans * a % mod;}a = 1ll * a * a % mod;n >>= 1;}return ans;
}int get_g() {if (mod == 2) {return 1;}int cur = mod - 1;vector<int> facts;for (int i = 2; 1ll * i * i <= cur; i++) {if (cur % i == 0) {facts.push_back(i);while (cur % i == 0) {cur /= i;}}}if (cur != 1) {facts.push_back(cur);}for (int i = 1; ; i++) {if (__gcd(i, mod) != 1) {continue;}int flag = 1;for (int &it : facts) {if (quick_pow(i, (mod - 1) / it) == 1) {flag = 0;break;}}if (flag) {return i;}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d %d", &n, &k, &mod);int w[20] = {1}, wn = quick_pow(get_g(), (mod - 1) / k);for (int i = 1; i <= k; i++) {w[i] = 1ll * w[i - 1] * wn % mod;}int ans[20] = {0};min_25::pre();for (int j = 0; j < k; j++) {min_25::wn = w[j];min_25::init();int res = 0;for (int l = 1, r; l <= n; l = r + 1) {r = n / (n / l);int cur = dec(min_25::solve(r), min_25::solve(l - 1));res = add(res, 1ll * (n / l) * cur % mod);}for (int r = 0; r < k; r++) {ans[r] = add(ans[r], 1ll * w[k - j * r % k] * res % mod);}}int inv_k = quick_pow(k, mod - 2);for (int i = 0; i < k; i++) {printf("%lld ", 1ll * ans[i] * inv_k % mod);}return 0;
}

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

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

相关文章

Leetcode 86. 分隔链表

给定一个链表和一个特定值 x&#xff0c;对链表进行分隔&#xff0c;使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head 1->4->3->2->5->2, x 3输出: 1->2->2->4->3->5题目分析…

深入理解 JVM Class文件格式(一)

** 一、JVM体系结构 ** ** 二、class格式文件概述 ** class文件是一种8位字节的二进制流文件&#xff0c; 各个数据项按顺序紧密的从前向后排列&#xff0c; 相邻的项之间没有间隙&#xff0c; 这样可以使得class文件非常紧凑&#xff0c; 体积轻巧&#xff0c; 可以被J…

min_25 推导及例题总结

min_25 筛 一个亚线性筛&#xff0c;复杂度大概是O(n34log⁡n)O(\frac{n ^{\frac{3}{4}}}{ \log n})O(lognn43​​)。 使用min_25min\_25min_25求前缀和&#xff0c;有两个基本特征&#xff1a;① 积性函数&#xff0c;② 满足质数点为多项式。 算法思路 给定n≤1011n \leq…

asp.net core 使用 signalR(一)

asp.net core 使用 signalR&#xff08;一&#xff09;IntroSignalR 是什么&#xff1f;ASP.NET Core SignalR 是一个开源代码库&#xff0c;它简化了向应用添加实时 Web 功能的过程。实时 Web 功能使服务器端代码能够即时将内容推送到客户端。SignalR 的适用对象&#xff1a;需…

深入理解 JVM Class文件格式(二)

** class文件中的特殊字符串 ** 特殊字符串是常量池中符号引用的一部分&#xff0c;包括三种&#xff1a; 类的全限定名&#xff0c; 字段和方法的描述符&#xff0c; 特殊方法的方法名。 下面我们就分别介绍这三种特殊字符串。 &#xff08;1&#xff09; 类的全限定名 在…

P4211 [LNOI2014]LCA(离线 + 在线 做法)

P4211 [LNOI2014]LCA 有一棵根节点为111树&#xff0c;有mmm次询问&#xff0c;每次给定l,r,zl, r, zl,r,z&#xff0c;输出∑ilrdep[lca(i,z)]\sum\limits_{i l} ^{r} dep[lca(i, z)]il∑r​dep[lca(i,z)]。 乍一看这题好像无从下手&#xff0c;仔细想想lca(i,z)lca(i, z)l…

.NET框架之“小马过河”

.NET框架之“小马过河”有许多流行的 .NET框架&#xff0c;大家都觉得挺“重”&#xff0c;认为很麻烦&#xff0c;重量级&#xff0c;不如其它“轻量级”框架&#xff0c;从而不愿意使用。面对形形色色的框架发愁&#xff0c;笔者也曾发愁。但我发现只要敢于尝试&#xff0c;这…

深入理解 JVM Class文件格式(三)

** JVM常量池中各数据项类型详解 ** 关于常量池的大概内容&#xff0c; 已经在 深入理解 JVM Class文件格式&#xff08;一&#xff09; 中讲解过了&#xff0c; 这篇文章中还介绍了常量池中的11种数据类型。 本文的任务是详细讲解这11种数据类型&#xff0c; 深度剖析源文件…

#6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)

#6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树&#xff0c;以及一个排列ppp&#xff0c;path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集&#xff0c;dist(u,v)dist(u, v)dist(u,v)为u,vu, vu,v之间的最短路的长度。 有mmm次询问&#xff0c;…

ML.NET 示例:搜索引擎结果排名

ML.NET 示例中文版&#xff1a;https://github.com/feiyun0112/machinelearning-samples.zh-cn/edit/master/samples/csharp/getting-started/Ranking_Web英文原版请访问&#xff1a;https://github.com/dotnet/machinelearning-samples/tree/master/samples/csharp/getting-st…

深入理解 JVM Class文件格式(四)

&#xff08;3&#xff09;CONSTANT_Integer_info 一个常量池中的CONSTANT_Integer_info数据项, 可以看做是CONSTANT_Integer类型的一个实例。 它存储的是源文件中出现的int型数据的值。 同样&#xff0c; 作为常量池中的一种数据类型&#xff0c; 它的第一个字节也是一个tag值…

.Net Core中使用Quartz.Net Vue开即用的UI管理

Quartz.NETQuartz.Net 定制UI维护了常用作业添加、删除、修改、停止、启动功能&#xff0c;直接使用cron表达式设置作业执行间隔&#xff0c;有完整的日志记录。Quartz.NET是一个功能齐全的开源作业调度系统&#xff0c;可用于从最小的应用程序到大型企业系统。Quartz.NET是一个…

Ancient Distance(妙啊!!!) [2020牛客暑期多校训练营(第四场)]

Ancient Distance 给定一颗根为111有nnn个节点的树&#xff0c;每次可以选定树上kkk节点当作特殊节点&#xff0c; 定义dis(u)dis(u)dis(u)为&#xff0c;从u−>1u->1u−>1遇上的第一个特殊点的距离&#xff0c;如果遇不上特殊点则dis(u)dis(u)dis(u)无穷大。 有nn…

深入理解 JVM Class文件格式(五)

&#xff08;8&#xff09; CONSTANT_Class_info 常量池中的一个CONSTANT_Class_info&#xff0c; 可以看做是CONSTANT_Class数据类型的一个实例。 他是对类或者接口的符号引用。 它描述的可以是当前类型的信息&#xff0c; 也可以描述对当前类的引用&#xff0c; 还可以描述对…

混沌工程详细介绍——Netflix持续交付实践探寻

内容来源&#xff1a;DevOps案例深度研究 – Netflix的文化与工程实践战队&#xff08;本文只展示部分案例PPT及研究成果&#xff0c;更多细节请关注案例分享活动&#xff0c;及本公众号&#xff09;。本案例内容贡献者&#xff1a;高金梅&#xff0c;李晓莉&#xff0c;潘雄鹰…

P4175 [CTSC2008]网络管理(整体二分)

P4175 [CTSC2008]网络管理 给定一棵有nnn个节点的树&#xff0c;点有点权&#xff0c;有两种操作&#xff1a;① 修改某个点的点权&#xff0c;② 查询两点路径间的点权第kkk大。 给定u,vu, vu,v&#xff0c;选定111号节点为根节点&#xff0c;设inf(x)inf(x)inf(x)表示从根节…

深入理解 JVM Class文件格式(六)

经过前几篇文章&#xff0c; 终于将常量池介绍完了&#xff0c; 之所以花这么大的功夫介绍常量池&#xff0c; 是因为对于理解class文件格式&#xff0c;常量池是必须要了解的&#xff0c; 因为class文件中其他地方&#xff0c;大量引用了常量池中的数据项。 对于还不了解常量池…

远程开发初探 - VS Code Remote Development

如果你是学生&#xff0c;你还在你的 windows 电脑上为各种环境配置头疼的时候&#xff0c;你应该了解一下 Remote Development。如果你喜欢 linux 的开发环境和舒适的 shell&#xff0c;但却不舍得抛弃 windows/macos 图形界面给你带来的用户体验和一些软件的兼容(QQ, 微信), …

深入理解 JVM Class文件格式(七)

本专栏列前面的一系列博客&#xff0c; 对Class文件中的一部分数据项进行了介绍。 本文将会继续介绍class文件中未讲解的信息。 先回顾一下上面一篇文章。 在上一篇博客中&#xff0c; 我们介绍了&#xff1a; this_class 对当前类的描述 super_class 对当前类的超类的描述 in…

P3250 [HNOI2016]网络(整体二分)

P3250 [HNOI2016]网络 给定一棵树&#xff0c;有三种操作&#xff1a; 给定u,v,wu, v, wu,v,w&#xff0c;表示u,vu, vu,v路径上有一个重要度为www的请求&#xff0c;给定ttt&#xff0c;第ttt个发生的请求结束&#xff0c;给定一个xxx&#xff0c;假设xxx发生故障&#xff0…