题目大意:求满足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安装遇到的问题

    1.import MySQLdb  错误 导入MySQLdb模块时报错: >>> import MySQLdb Traceback (most recent call last): ...

  2. day07 分支,循环

    目录 if(分支) if的语法 if...else... if...elif...else if的嵌套 for循环 for-else 语句 for循环的嵌套(重要) range介绍 while循环 w ...

  3. CSS——背景图像区域

    background-clip属性 background-clip属性指定背景绘制区域 语法 background-clip:border-box|padding-box|content-box; b ...

  4. HDU 5288 OO’s Sequence [数学]

     HDU 5288 OO’s Sequence http://acm.hdu.edu.cn/showproblem.php?pid=5288 OO has got a array A of size ...

  5. Jmeter中模拟多用户执行多场景操作

    1.其实一个用户组就是一个场景(Thread Group).可以在一个测试计划中进行多个场景的执行,在测试计划下加一个全局的User Defined Variables,在这个里面可以设置执行总数to ...

  6. org.xml.sax.SAXParseException: Failed to read schema document 的原因分析与解决方法

    现象: org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema documen t 'http://www.s ...

  7. 一些css兼容问题

    由于各浏览器的不同,会存在一些兼容问题,特别是兼容IE6/7/8 下面简单介绍了一些解决方法,更多问题可以访问 W3help.org来查看. 可以通过js获取浏览器版本 document.body.i ...

  8. cogs 304. [NOI2001] 方程的解数(meet in the middle)

    304. [NOI2001] 方程的解数 ★★☆   输入文件:equation1.in   输出文件:equation1.out   简单对比时间限制:3 s   内存限制:64 MB 问题描述 已 ...

  9. 【转载】How to Reset USB Device in Linux

    USB devices are anywhere nowadays, even many embedded devices replace the traditional serial devices ...

  10. How to get the MouseEvent coordinates for an element that has CSS3 Transform?

    I want to detect where a MouseEvent has occurred, in coordinates relative to the clicked element. Wh ...