题目大意:求满足gcd(a,b,c)==1,1/a+1/b=1/c,a,b,c<=n的{a,b,c}有序三元组个数

因为题目里有LJJ我才做的这道题

出题人官方题解https://www.cnblogs.com/Blog-of-Eden/p/9367521.html对我帮助很大

思维很巧妙的一道题,佩服出题人Orzzz

由原式可得,$c=\frac{ab}{a+b}$

令g=gcd(a,b),A=a/g,B=b/g,显然gcd(g,c)==1,gcd(A,B)==1

带入可得$\frac{ABg^{2}}{(A+B)g}=c$ <=> $\frac{ABg}{A+B}=c$

因为A,B互质,所以$A,B,A+B$两两互质

由$\frac{ABg}{A+B}=c$可得

因为c是整数,A与A+B互质,B与$A+B互质,所以当且仅当(A+B)|g

令G=g/(A+B),可得ABG=c,所以G|c,而g与c互质,所以G作为g的因子,与c也一定互质,即gcd(G,c)==1,所以G只能等于1

综上,可得g=A+B,c=AB,a+b=$g^{2}$

现在大问题转化成了一般性问题,每次枚举一个g,求在一定范围内,g=A+B且gcd(A,B)==1的数对数量

显然这样的数对数量可以用莫比乌斯反演求得

由于g<=$\sqrt(2n)$,g<$2*10^{6}$,通过预处理,分解质因数是时间可以优化成logn,再筛出它所有的因子,利用莫比乌斯函数的容斥性质,即可求得合法数对数量

筛出每个数的因子的时间是均摊logn(调和级数),但由于空间限制,不能预处理出每个数的所有因子..

而A的合法范围则是保证A<=g,A*g<=n&&B*g<=n

细节需要多思考

 #include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 2001000
#define maxn 2000000
#define ll long long
#define uint unsigned int
using namespace std; ll n;
int cnt; int pr[N],use[N],mu[N],pmu[N],nxt[N];
void get_pr()
{
mu[]=pmu[]=;
for(int i=;i<=maxn;i++)
{
if(!use[i]) pr[++cnt]=i,nxt[i]=i,mu[i]=-;
pmu[i]=pmu[i-]+mu[i];
for(int j=;j<=cnt&&i*pr[j]<=maxn;j++){
use[i*pr[j]]=,nxt[i*pr[j]]=pr[j];
if(i%pr[j]==){
mu[i*pr[j]]=;
break;
}else{
mu[i*pr[j]]=-mu[i];
}
}
}
}
int son[N],d[N],ps[N],num,nson;
void dfs_son(int s,int dep)
{
if(dep>num) {son[++nson]=s;return;}
for(int j=;j<=d[dep];j++)
dfs_son(s,dep+),s*=ps[dep];
}
void get_son(int x)
{
num=;
while(x!=){
int p=nxt[x];ps[++num]=p;d[num]=;
while(x%p==) x/=p,d[num]++;
}
if(x!=) ps[++num]=x,d[num]=;
for(int i=;i<=nson;i++) son[i]=;
nson=;
dfs_son(,);
}
ll solve(int l,int r,int g)
{
ll ans=;l--;
get_son(g);
for(int i=;i<=nson;i++)
ans+=1ll*mu[son[i]]*(r/son[i]-l/son[i]);
return ans;
} int main()
{
//freopen("t1.in","r",stdin);
scanf("%lld",&n);
ll sq=sqrt(n*);
get_pr();
ll ans=;
for(ll g=;g<=sq;g++)
{
int l=max(1ll,((g*g-n)/g+( ((g*g-n)%g==)?: )));
int r=min(g-,n/g);
if(l>r) continue;
ans+=solve(l,r,g);
}
printf("%lld\n",ans);
return ;
}

luogu 4844 LJJ爱数数 (莫比乌斯反演+数学推导)的更多相关文章

  1. Luogu 4844 LJJ爱数数

    LOJ 6482 设$d = gcd(a, b)$,$xd = a$,$yd = b$,因为$\frac{1}{a} + \frac{1}{b} = \frac{a + b}{ab} = \frac{ ...

  2. 【BZOJ3930】选数(莫比乌斯反演,杜教筛)

    [BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...

  3. 关于不同进制数之间转换的数学推导【Written By KillerLegend】

    关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...

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

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

  5. 【Luogu】P2303Longge的问题(莫比乌斯反演)

    就让我这样的蒟蒻发一个简单易想的题解吧!!! 这题我一开始一看,woc这不是莫比乌斯反演么,推推推,推到杜教筛,输出结果一看不对 emmm回来仔细想想……woc推错了? 然后撕烤半天打了个暴力,A了 ...

  6. [CQOI2015]选数(莫比乌斯反演,杜教筛)

    [CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...

  7. BZOJ3930 [CQOI2015]选数【莫比乌斯反演】

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  8. P3172 [CQOI2015]选数(莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...

  9. [BZOJ2045]双亲数(莫比乌斯反演)

    双亲数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 959  Solved: 455[Submit][Status][Discuss] Descri ...

随机推荐

  1. Python笔记(28)-----继承

    来自https://blog.csdn.net/sunwukong_hadoop/article/details/80175292 1.Python的继承以及调用父类成员 python子类调用父类成员 ...

  2. Windows Vista 安装和使用指导 - 停止支持后的几条建议

    简介 曾经被广大网民吐槽的Windows Vista现在已经淡出了人们的视线,但仍有一些朋友想要体验一下这个操作系统.Windows Vista是Windows发展路线上的里程碑,相比之前的Windo ...

  3. BZOJ 4817 [SDOI2017]树点涂色 (LCT+线段树维护dfs序)

    题目大意:略 涂色方式明显符合$LCT$里$access$操作的性质,相同颜色的节点在一条深度递增的链上 用$LCT$维护一个树上集合就好 因为它维护了树上集合,所以它别的啥都干不了了 发现树是静态的 ...

  4. 洛谷 P1134 阶乘问题

    一开始只保留最后一位,交上去29 #include<cstdio> #include<cmath> #include<algorithm> #define REP( ...

  5. 数据库-mongodb-聚合与map reduce

    分组统计:group() 简单聚合:aggregate() 强大统计:mapReduce() Group函数: 1.不支持集群.分片,无法分布式计算 2.需要手写聚合函数的业务逻辑 curr指当前行, ...

  6. SQL SERVER-安装和卸载

    卸载后无法正常安装SQL SERVER 删除了本机的SQL SERVER以后,我发现我本机的SQL SERVER 再也安装不上了,这个一个比较严重的问题,要每天定时备份数据库到指定的地方才能防止数据丢 ...

  7. MRv2 工作机制 、 公平调度器、MR压缩、边数据

    对于节点数超过 4000 的大型集群,前一节描述的 MapReduce 系统开始面临着扩展的瓶颈. 2010 年 Yahoo 的团队开始设计下一代的 MapReduce. (Yet Another R ...

  8. powerDesigner如何动态显示mysql数据库表结构

    原文链接:http://jingyan.baidu.com/article/e5c39bf5d64efa39d760333c.html 有时候,由于数据库中的表太多,主外键关系复杂,对数据库的非设计人 ...

  9. Linux网络编程(3)——多进程、多线程

    在我的里面已经介绍了linux以下c的进程.线程接口,这里就不做过多阐述了. 多进程 这里多进程採用传统的多进程模型.每当有client发来的连接时创建一个进程来处理连接,一个子进程相应一个连接. 有 ...

  10. Mosquito的优化——epoll优化(七)

    本文由逍遥子撰写,转发请标注原址: http://blog.csdn.net/houjixin/article/details/46413583 或 http://houjixin.blog.163. ...