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\)
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]$$
后半部分就是喜闻乐见的莫比乌斯反演了:
\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爱数数的更多相关文章
- 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 ...
- 「LOJ6482」LJJ爱数数
「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...
- 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} ...
- [HZOI 2016]我们爱数数
[HZOI 2016]我们爱数数 题目大意: 一张圆桌,每个位置按顺时针从\(1\)到\(n\)编号.有\(n\)个人,编号从\(1\)到\(n\).如果编号为\(i\)的人坐到了编号为\(i\)的位 ...
- COJ 0036 数数happy有多少个?
数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...
- 【BZOJ】【3530】【SDOI2014】数数
AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 682 Solved: 364 Description 我们称一 ...
- BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
3530: [Sdoi2014]数数 题意:\(\le N\)的不含模式串的数字有多少个,\(n=|N| \le 1200\) 考虑数位DP 对于长度\(\le n\)的,普通套路DP\(g[i][j ...
随机推荐
- Delphi 泛型(三十篇)
Delphi 泛型(三十篇)http://www.cnblogs.com/jxgxy/category/216671.html
- Lua学习十----------Lua数组
© 版权声明:本文为博主原创文章,转载请注明出处 1.LUA数组 - 一维数组 - 多维数组 2.array.lua -- 一维数组 print("一维数组") array1 = ...
- Junit 内部解密之一: Test + TestCase + TestSuite
转自:http://blog.sina.com.cn/s/blog_6cf812be0100wbhq.html nterface: Test 整个测试的的基础接口 Method 1: abstract ...
- 搭建redis集群遇到的坑
搭建redis集群遇到的坑 #!/bin/bash # 作者: tuhooo # 日期: 2017.4.23 20.15 # 用途: 通过ruby脚本启动redis伪集群 if [ $2 == &qu ...
- nginx的proxy_pass到$host的问题
今天在配置一个location的时候,希望使用一个变量如$host来指示nginx代理: location /test/ { proxy_pass http://$host; } 如你想不到,这个配置 ...
- Truck History - poj 1789 (Prim 算法)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20884 Accepted: 8075 Description Ad ...
- Android ijkplayer 强大的视频播放器框架教程 -- 导入demo运行(一)
首先介绍下这个开源项目,这个开源项目是BiliBli 开源的,首先感谢他们的团队. 这是开源的地址: https://github.com/Bilibili/ijkplayer 首先我为什么要选这个, ...
- Java final关键字特点
一.特点 1.由于继承,方法可以重写,所以父类的功能就会被子类覆盖2.有时候我们不想子类覆盖父类的功能,这时候我们可以使用final关键字3.final可以修饰:类.变量,方法.4.final修饰类, ...
- Android 适配(一)
一.Android适配基础参数 1.常见分辨率(px) oppx 2340x1080 oppR15 2280x1080 oppor11sp 2160*1080 ...
- poj1408(求线段交点)
求出所有线段的交点,然后利用叉乘求四边形面积即可. // // main.cpp // poj1408 // // Created by 陈加寿 on 15/12/31. // Copyright ( ...