BZOJ3994:利用莫比乌斯反演求约数个数和

解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导

很麻烦

 1 #include<cstdio>
 2 #include<algorithm>
 3 using std::min;
 4 const int maxn=50005;
 5 int cnt;
 6 long long ans=0;
 7 bool vis[maxn];
 8 int mu[maxn],sum[maxn];
 9 long long prim[maxn],g[maxn];
10 inline long long read()
11 {
12     long long x=0,f=1;char ch=getchar();
13     while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
14     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
15     return x*f;
16 }
17 void get_mu(int n)
18 {
19     mu[1]=1;
20     for(int i=2;i<=n;i++)
21     {
22         if(!vis[i]){prim[++cnt]=i;mu[i]=-1;}
23         for(int j=1;j<=cnt&&prim[j]*i<=n;j++)
24         {
25             vis[prim[j]*i]=1;
26             if(i%prim[j]==0) break;
27             else mu[i*prim[j]]=-mu[i];
28         }
29     }
30     for(int i=1;i<=n;i++) sum[i]=sum[i-1]+mu[i];
31     for(int i=1;i<=n;i++)
32     {
33         for(int l=1,r;l<=i;l=r+1)
34         {
35             r=(i/(i/l));
36             g[i]+=(long long)(r-l+1)*(long long)(i/l);
37         }
38     }
39 }
40 int main()
41 {
42     int T,n,m,max_rep;
43     T=read();
44     get_mu(50000);
45     while(T--)
46     {
47         ans=0;
48         n=read();m=read();
49         max_rep=min(n,m);
50         for(int l=1,r;l<=max_rep;l=r+1)
51         {
52             r=min(n/(n/l),m/(m/l));
53             ans+=(sum[r]-sum[l-1])*(long long)g[n/l]*(long long)g[m/l];
54         }
55         printf("%lld\n",ans);
56     }
57     return 0;
58 }

转载于:https://www.cnblogs.com/aininot260/p/9702622.html

数学:莫比乌斯反演-约数个数和相关推荐

  1. 【数学专题】约数个数与欧拉函数

    整理的算法模板合集: ACM模板 目录 一.约数个数 1. AcWing 1291. 轻拍牛头 2. AcWing 1294. 樱花 2.1 AcWing 197. 阶乘分解 3. AcWing 19 ...

  2. SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...

  3. 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

    题目描述 设d(x)为x的约数个数,给定N.M,求   输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...

  4. [SDOI2015]约数个数和【莫比乌斯反演】

    [SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...

  5. BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]

    2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...

  6. 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」

    题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...

  7. 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演

    [BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数 ...

  8. P3327-[SDOI2015]约数个数和【莫比乌斯反演】

    正题 题目链接:https://www.luogu.com.cn/problem/P3327 题目大意 TTT组询问给出n,mn,mn,m,d(x)d(x)d(x)表示xxx的约数个数,求∑i=1n∑ ...

  9. 《算法竞赛进阶指南》数论篇(3)-组合计数,Lucas定理,Catalan数列,容斥原理,莫比乌斯反演,概率与数学期望,博弈论之SG函数

    文章目录 组合计数 例题:Counting swaps Lucas定理 Cnm≡Cnmodpmmodp∗Cn/pm/p(modp)C_n^m\equiv C_{n\ mod\ p}^{m\ mod\ ...

最新文章

  1. php strncmp函数用法,strncmp函数用法详解
  2. “面试不败计划”:面试题基础一
  3. 中国石材胶市场需求现状调研与前景预测分析报告2022版
  4. Oracle原理: 行级锁和表级锁
  5. VTK:Filtering之PerlinNoise
  6. 深入理解面向对象设计的七大原则
  7. 02-第二章 基本类型
  8. python基础数据结构互转和2、8、10、16进制互转
  9. 常用docker命令,及一些坑
  10. ivew select组件 DatePicker组件的清空
  11. kubernetes v1.8.8中 RBAC DENY 解决办法
  12. 10月8日提交的结对编程工程中的经验和教训
  13. python对文件去重_python对文件夹内文件去重
  14. 怎么把原本一页的PDF拆分成单独的两页?
  15. 主观能动性存在的一个理论根据
  16. 19【推荐系统16】CTRCVR联合学习
  17. 申请美国大学计算机专业,美国TOP20大学计算机专业申请建议
  18. 数据库技术-数据库概念设计
  19. 1.markdown基础语法
  20. java安装的时候无效参数,java.sql.SQLException: 调用中无效的参数

热门文章

  1. 使用async关键字进行TCP server的连接
  2. sort+参数+linux,linux sort下令参数及用法详解
  3. 超低内阻mos管_FHU100N03低压MOS管保障榨汁机电路正常运行!
  4. 计算机系统不能更改,电脑系统时间怎么设定不能修改
  5. 2021 icme_2021第十届制造工程与工艺国际会议(ICMEP 2021)
  6. app自定义图标 vue_uniapp自定义图标组件
  7. oracle查看语句执行历史,AWT查看oracle历史sql语句执行
  8. 怎样把项目上传服务器,怎样将项目上传云服务器
  9. php注册界面模板,WeUI注册页面
  10. 自适应小波阈值去噪python_基于python的小波阈值去噪算法