初涉的话先留坑吧

题目大意

$\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破译密码相关推荐

  1. 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11253/J ...

  2. 莫比乌斯函数+莫比乌斯反演

    几个经典的莫比乌斯反演练习题 先来一个莫比乌斯函数板子 1 int N = 10000000; 2 int not_prim[10000050],prim[10000050]; 3 long long ...

  3. BZOJ 1114 Number theory(莫比乌斯反演+预处理)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=71738 题意:给你一个整数序列a1, a2, a3, ... , ...

  4. BZOJ 2820 YY的GCD 莫比乌斯反演

    2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...

  5. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  6. 【bzoj2820】YY的GCD 莫比乌斯反演

    题目描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是 ...

  7. 数学:莫比乌斯反演-约数个数和

    BZOJ3994:利用莫比乌斯反演求约数个数和 解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导 很麻烦 1 #include<cstdio> 2 #inclu ...

  8. Bzoj2694/Bzoj4659:莫比乌斯反演

    Bzoj2694/Bzoj4659:莫比乌斯反演 先上题面: 首先看到这数据范围显然是反演了,然而第三个限制条件十分不可做.于是我们暂且无视他,大不了补集转化算完再减是吧. 于是我们有: 这里我们定义 ...

  9. BZOJ 2301 Problem b(莫比乌斯反演+分块优化)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...

最新文章

  1. 计算机原理 英文版,计算机原理介绍英文版.doc
  2. OBYC中的GBB一般修改的解释
  3. IpIImage - CvMat 转换方法
  4. 抑郁症的前期体现有哪些
  5. c语言记录五个数组编程,C语言经典编程之数组
  6. 汇编跳转比较用的列表
  7. 原生JavaScript第一篇
  8. JavaScript-方法
  9. JDK1.8 Linux Windows 网盘下载
  10. Asp.net自定义控件开发任我行(附1)-属性一览众山小
  11. Skyline软件二次开发初级——10如何在WEB页面中的三维地图上控制图层对象
  12. 谈谈我所了解的数据分析行业(下)
  13. 使用阿里字体彩色图标
  14. unity旗帜飘动shader
  15. 毕业设计 Stm32云平台的智能病房监控系统
  16. 如何选择靠谱的插画培训课程
  17. springboot定期清理文件
  18. 【干货】游戏开发团队部门岗位
  19. SpringBoot配置文件(1)
  20. 在Visual Studio项目中根据系统平台自动引用32或64位的DLL

热门文章

  1. Exception和RuntimeException的区别
  2. 15、iOS开发之duplicate symbols for architecture x86_64错误
  3. 【转】七个例子帮你更好地理解 CPU 缓存
  4. Java开发人员的十大戒律
  5. javascript --- 对象属性的深层次获取
  6. javascript --- 堆栈内存与闭包的作用
  7. JavaScript --- [学习笔记] 原型模式
  8. 别再管你的API叫微服务了
  9. Pycharm 输出中文或打印中文乱码现象的解决办法
  10. 正则表达式的基本语法