【莫比乌斯反演】10.30破译密码
初涉的话先留坑吧
题目大意
$\sum_{i_1}^{a_1}\sum_{i_2}^{a_2}\cdots\sum_{i_m}^{a_m}(i_1,i_2,\cdots,i_m)$
$a_i<=1e6,2=<m<=10$
题目分析
首先寄存两篇比较好的博客:
1.铃悬的数学小讲堂——狄利克雷卷积与莫比乌斯反演
2.[学习笔记]莫比乌斯反演常见模型
这个问题可以推广至一类模型:$\sum_{i=1}^n\sum_{j=1}^mf[\gcd(i,j)]$.
该模型的推论是$原式=\sum_{u=1}^{\min(n,m)}\lfloor\frac{n}{u}\rfloor\lfloor\frac{m}{u}\rfloor\sum_{d|u}f[d]\mu(\frac{u}{d})$
注意到在本题中$f=id$,那么也就是说$原式=\sum_{u=1}^{\min(n,m)}\lfloor\frac{n}{u}\rfloor\lfloor\frac{m}{u}\rfloor \varphi(u)$.
因此先一遍线性筛求$\varphi$的前缀和,再数论分块做$\lfloor\frac{n}{u}\rfloor$这一部分。
本题对模型的转化还不算太深(算是比较裸的反演)
1 #include<bits/stdc++.h> 2 typedef long long ll; 3 const int maxn = 13; 4 const int MO = 1e9+7; 5 const int TOP = 1000000; 6 const int maxPri = 80035; 7 const int maxNum = 1000035; 8 9 int T,n,mn,a[maxn],pr[maxPri]; 10 ll phi[maxNum],ans,tmp; 11 bool vis[maxNum]; 12 13 int read() 14 { 15 char ch = getchar(); 16 int num = 0; 17 bool fl = 0; 18 for (; !isdigit(ch); ch=getchar()) 19 if (ch=='-') fl = 1; 20 for (; isdigit(ch); ch=getchar()) 21 num = (num<<1)+(num<<3)+ch-48; 22 if (fl) num = -num; 23 return num; 24 } 25 void init() 26 { 27 phi[1] = 1; 28 for (int i=2; i<=TOP; i++) 29 { 30 if (!vis[i]) pr[++pr[0]] = i, phi[i] = i-1; 31 for (int j=1; (j<=pr[0])&&(pr[j]*i<=TOP); j++) 32 { 33 vis[pr[j]*i] = 1, phi[pr[j]*i] = phi[i]*pr[j]; 34 if (i%pr[j]==0) break; 35 phi[pr[j]*i] = phi[i]*(pr[j]-1); 36 } 37 } 38 for (int i=2; i<=TOP; i++) phi[i] = (phi[i]+phi[i-1])%MO; 39 } 40 int main() 41 { 42 freopen("gcd.in","r",stdin); 43 freopen("gcd.out","w",stdout); 44 T = read(), init(); 45 while (T--) 46 { 47 n = read(), ans = 0, mn = 0x3f3f3f3f; 48 for (int i=1; i<=n; i++) 49 a[i] = read(), mn = mn>a[i]?a[i]:mn; 50 for (int i=1, j=0; i<=mn; i=j+1) 51 { 52 j = mn, tmp = 1; 53 for (int k=1; k<=n; k++) j = std::min(j, a[k]/(a[k]/i)); 54 for (int k=1; k<=n; k++) tmp = tmp*(a[k]/i)%MO; 55 ans = (ans+(phi[j]-phi[i-1]+MO)*tmp%MO)%MO; 56 } 57 printf("%lld\n",ans); 58 } 59 return 0; 60 }
END
转载于:https://www.cnblogs.com/antiquality/p/9892267.html
【莫比乌斯反演】10.30破译密码相关推荐
- 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11253/J ...
- 莫比乌斯函数+莫比乌斯反演
几个经典的莫比乌斯反演练习题 先来一个莫比乌斯函数板子 1 int N = 10000000; 2 int not_prim[10000050],prim[10000050]; 3 long long ...
- BZOJ 1114 Number theory(莫比乌斯反演+预处理)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738 题意:给你一个整数序列a1, a2, a3, ... , ...
- BZOJ 2820 YY的GCD 莫比乌斯反演
2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...
- BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...
- 【bzoj2820】YY的GCD 莫比乌斯反演
题目描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是 ...
- 数学:莫比乌斯反演-约数个数和
BZOJ3994:利用莫比乌斯反演求约数个数和 解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导 很麻烦 1 #include<cstdio> 2 #inclu ...
- Bzoj2694/Bzoj4659:莫比乌斯反演
Bzoj2694/Bzoj4659:莫比乌斯反演 先上题面: 首先看到这数据范围显然是反演了,然而第三个限制条件十分不可做.于是我们暂且无视他,大不了补集转化算完再减是吧. 于是我们有: 这里我们定义 ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...
最新文章
- 计算机原理 英文版,计算机原理介绍英文版.doc
- OBYC中的GBB一般修改的解释
- IpIImage - CvMat 转换方法
- 抑郁症的前期体现有哪些
- c语言记录五个数组编程,C语言经典编程之数组
- 汇编跳转比较用的列表
- 原生JavaScript第一篇
- JavaScript-方法
- JDK1.8 Linux Windows 网盘下载
- Asp.net自定义控件开发任我行(附1)-属性一览众山小
- Skyline软件二次开发初级——10如何在WEB页面中的三维地图上控制图层对象
- 谈谈我所了解的数据分析行业(下)
- 使用阿里字体彩色图标
- unity旗帜飘动shader
- 毕业设计 Stm32云平台的智能病房监控系统
- 如何选择靠谱的插画培训课程
- springboot定期清理文件
- 【干货】游戏开发团队部门岗位
- SpringBoot配置文件(1)
- 在Visual Studio项目中根据系统平台自动引用32或64位的DLL