题目

P4844 LJJ爱数数

本想找到莫比乌斯反演水题练练,结果直接用了两个多小时才做完

做法

\(\sum\limits_{a=1}^n\sum\limits_{b=1}^n\sum\limits_{c=1}^n[gcd(a,b,c)=1\&\&\frac{1}{a}+\frac{1}{b}=\frac{1}{c}]\)

\([gcd(a,b,c)=1]\)这个好理解,但后面\(\frac{1}{a}+\frac{1}{b}=\frac{1}{c}\)怎么办呢?

下意识去掉分数:\((a+b)c=ab\)

设\(g=gcd(a,b),A=\frac{a}{g},B=\frac{b}{g}\)

原式化为:\((A+B)c=ABg\)

\(\therefore \frac{(A+B)c}{g}=AB\),\(g\)要整除\((A+B)c\)

由于\(gcd(a,b,c)=1\),\(g\)不整除\(c\),所以\(g\)整除\(A+B\)

\(\therefore \frac{A+B}{g}=\frac{AB}{c}\),设\(p=\frac{A+B}{g}=\frac{AB}{c}\)

\(c=\frac{A+B}{g} \Longrightarrow p\)整除同时整除\(A,B\)

\(g=gcd(a,b),A=\frac{a}{g},B=\frac{b}{g} \Longrightarrow A,B\)互质

\(\therefore p=1\)

\(\therefore A+B=g \Longrightarrow a+b=g^2,c=AB \Longrightarrow c=\frac{ab}{g^2}\)

接下来就好做了嘛,由于\(c=\frac{ab}{g^2}\)的限制,g的上限瞬间就特别小了,所以我们枚举\(g\)

\[\begin{aligned}
Ans & =\sum\limits_{g=1}^{\sqrt {2n}}\sum\limits_{i=1}^{\frac{n}{g}}[gcd(ig,g^2-ig)=g]\\
&=\sum\limits_{g=1}^{\sqrt {2n}}\sum\limits_{i=1}^{\frac{n}{g}}[gcd(i,g-i)=1]\\
&=\sum\limits_{g=1}^{\sqrt {2n}}\sum\limits_{i=1}^{\frac{n}{g}}[gcd(i,g)=1]\\
\end{aligned}\]

其实前面\(i\)的范围并不精确:\(1<=g^2-ig<=n \Longrightarrow g-\frac{n}{g}<=i<=g-1\)

再结合之前的范围:\(max(1,g-\frac{n}{g})<=i<=min(g-1,\frac{n}{d})\)

原式变为:$$\sum\limits_{g=1}{\sqrt{2n}}\sum\limits_{i=max(1,g-\frac{n}{g})}{min(g-1,\frac{n}{d})}[gcd(i,g)=1]$$

后半部分就是喜闻乐见的莫比乌斯反演了:

\[\begin{aligned}
\sum\limits_{i=1}^k[gcd(i,g)=1]&=\sum\limits_{i=1}^k\sum\limits_{j|gcd(i,g)}\mu(j)\\
&=\sum\limits_{i=1}^k\sum\limits_{j=1}^g\mu(j)[j|g][j|]\\
&=\sum\limits_{j|g}\mu(j)\frac{k}{j}\\
\end{aligned}\]

My complete code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
typedef long long LL;
const int maxn=15000000;
inline LL Read(){
LL x(0),f(1); char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*f;
}
int mu[maxn],prime[maxn];
bool visit[maxn];
inline void F_phi(int N){
mu[1]=1; int tot(0);
for(int i=2;i<=N;++i){
if(!visit[i])
prime[++tot]=i,
mu[i]=-1;
for(int j=1;j<=tot&&i*prime[j]<=N;++j){
visit[i*prime[j]]=true;
if(i%prime[j]==0)
break;
else
mu[i*prime[j]]=-mu[i];
}
}
}
LL Up;
int n;
struct node{
int val,next;
}dis[maxn];
int num;
int head[maxn];
inline void Add(int u,int val){
dis[++num]=(node){val,head[u]},head[u]=num;
}
inline LL Get(int d,int k){
LL ret(0);
for(int i=head[d];i&&abs(dis[i].val)<=k;i=dis[i].next)
ret+=k/dis[i].val;
return ret;
}
int main(){
Up=Read();
n=sqrt(2*Up);
F_phi(n);
for(int i=1;i<=n;++i)
for(int j=1;1ll*j*i<=1ll*n;++j)
if(mu[j])
Add(i*j,mu[j]*j);
LL ans(0);
for(int g=1,l,r;g<=n;++g){
l=max(1ll*1,g-Up/g),r=min(1ll*(g-1),Up/g);
ans+=Get(g,r)-Get(g,l-1);
}
printf("%lld",ans);
return 0;
}

P4844 LJJ爱数数的更多相关文章

  1. P4844 LJJ爱数数 数论

    思路: 化简后得到(a+b)c=ab,设g=(a,b),A=a/g,B=b/g,则g(A+B)c=ABg^2,即(A+B)c=ABg 由题目已知条件:(a,b,c)=1,即(g,c)=1,g|(A+B ...

  2. 「LOJ6482」LJJ爱数数

    「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...

  3. LJJ爱数数

    LJJ爱数数 求\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\epsilon(gcd(i,j,k))(\frac{1}{i}+\frac{1}{j}==\frac{1} ...

  4. [HZOI 2016]我们爱数数

    [HZOI 2016]我们爱数数 题目大意: 一张圆桌,每个位置按顺时针从\(1\)到\(n\)编号.有\(n\)个人,编号从\(1\)到\(n\).如果编号为\(i\)的人坐到了编号为\(i\)的位 ...

  5. COJ 0036 数数happy有多少个?

    数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...

  6. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  7. BZOJ3530: [Sdoi2014]数数

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 322  Solved: 188[Submit][Status] ...

  8. 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)

    3530: [Sdoi2014]数数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 682  Solved: 364 Description 我们称一 ...

  9. BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]

    3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...

随机推荐

  1. 如何在aspx页面中使用ascx控件(用户自定义的一个控件)?

    aspx是页面文件ascx是用户控件,用户控件必须嵌入到aspx中才能使用. ascx是用户控件,相当于模板 其实ascx你可以理解为Html里的一部分代码,只是嵌到aspx里而已,因为aspx内容多 ...

  2. 闪屏(Splash)

    好久没弄ReactNative了, 写个怎样实现闪屏(Splash)的文章吧. 注意: (1) 怎样切换页面. (2) 怎样使用计时器TimerMixin. (3) 怎样使用动画效果. (4) 怎样载 ...

  3. Android分享功能的一点总结

    前段时间给曾经的App加了分享功能,与大家分享一些心得. 实现分享功能有三种方式: 1.调用Android自带的分享接口.这样的方式最简单.它是直接调用App的发信息功能,把我们的链接通过信息方式发出 ...

  4. 小书匠markdown编辑器V1.0.12发布

    a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2p ...

  5. 【安装.net framework4.0】之安装失败,“安装时发生严重错误”

    在网上查了很多资料都说改什么文件名和注册表什么的,根本没用,后来查到一篇文章,提供了下面的解决办法: 地址:<Microsoft .NET Framework 4.0安装时发生严重错误 无法安装 ...

  6. 【Mysql】Navicat For Mysql快捷键

    ctrl+q 打开查询窗口ctrl+/ 注释sql语句ctrl+shift +/ 解除注释ctrl+r 运行查询窗口的sql语句ctrl+shift+r 只运行选中的sql语句F6 打开一个mysql ...

  7. 下载某资源文件并加载其中的所有Prefab到场景中

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

  8. C语言基础知识【数据类型】

    C 数据类型1.在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式.2.C 中的类型可分为以下几种:序号    类 ...

  9. 读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB

    OpenTSDB是基于HBase的开源监控系统,能够支持上万规模集群监控和上亿数据点採集. 当中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了 ...

  10. kubernetes高级之集群中使用sysctls

    系列目录 在linux系统里,sysctls 接口允许管理员在运行时修改内核参数.参数存在于/proc/sys/虚拟进程文件系统里.参数涉及到很多子模块,例如: 内核(kernel)(常见前缀kern ...