JZOJ 5843.B
给定 个正整数序列 ,每个序列长度为 。
选择至少 个序列,在每个被选择的序列中选择一个元素,求出所有被选择的元素的 。
求所有方案的结果之和,答案对 取模。两种方案不同,当且仅当存在至少一个元素,在一种方案中被选择,在另一种中没有。
第一行,两个正整数 。
接下来 行,每行 个正整数,第 行代表序列 。
第一行,一个整数,代表答案对 取模的结果。
解析
一道比较难的莫比乌斯反演题,要用到其中的性质,且按套路行事技巧处很多
最后推出的是一个关于欧拉函数的式子,莫比乌斯不见了
好,现在进行套路推导
先设 表示选择至少一个序列,在每个被选择的序列选择一个元素,它们的 的方案数。
则易得
然后套路 表示同 但涵盖了 的倍数,即
然后我们发现,我们先枚举 ,再枚举其倍数 ,而后面 肯定是 的倍数,所以我们可以简化式子
而此时,为了日后式子的简便即实现,我们设
表示第 个数列所有是 的倍数的数的个数
再为了枚举得到所有答案,我们设 表示所有元素的最大值
然后一波推式子,反演
然后,然后~~~好像没戏了
但,我们有伟大的欧拉!!
上
哈哈哈,太棒了!
相同的一部分,代入式子
于是这题就这样了。
线性筛 ,预处理 数组(根据套路,不要枚举因子而是枚举倍数)。
#include<cstdio> #include<iostream> using namespace std; typedef long long LL; const int N = 1e5; const LL mod = 1e9 + 7; int lim , n , m , a[25][N + 5] , cnt[25][N + 5] , phi[N + 5] , prime[N + 5] , vis[N + 5] , tot; LL ans; inline void getPhi() { phi[1] = 1; for(register int i = 2; i <= N; i++) { if (!vis[i]) phi[prime[++tot] = i] = i - 1; for(register int j = 1; j <= tot && prime[j] * i <= N; j++) { vis[prime[j] * i] = 1; if (i % prime[j] == 0) { phi[prime[j] * i] = phi[i] * prime[j]; break; } phi[prime[j] * i] = phi[i] * (prime[j] - 1); } } } inline void getCnt() { for(register int i = 1; i <= n; i++) for(register int j = 1; j <= lim; j++) for(register int k = 2; k * j <= lim; k++) cnt[i][j] += cnt[i][j * k]; } int main() { freopen("b.in" , "r" , stdin); freopen("b.out" , "w" , stdout); scanf("%d%d" , &n , &m); for(register int i = 1; i <= n; i++) for(register int j = 1; j <= m; j++) scanf("%d" , &a[i][j]) , cnt[i][a[i][j]]++ , lim = max(lim , a[i][j]); getPhi() , getCnt(); for(register int d = 1; d <= lim; d++) { LL res = 1; for(register int j = 1; j <= n; j++) res = res * (LL)(cnt[j][d] + 1) % mod; ans = (ans + (LL)((LL)phi[d] * (res - 1)) % mod) % mod; } printf("%lld" , ans); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具