luogu 4844 LJJ爱数数 (莫比乌斯反演+数学推导)
题目大意:求满足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爱数数 (莫比乌斯反演+数学推导)的更多相关文章
- Luogu 4844 LJJ爱数数
LOJ 6482 设$d = gcd(a, b)$,$xd = a$,$yd = b$,因为$\frac{1}{a} + \frac{1}{b} = \frac{a + b}{ab} = \frac{ ...
- 【BZOJ3930】选数(莫比乌斯反演,杜教筛)
[BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...
- 【Luogu】P2303Longge的问题(莫比乌斯反演)
就让我这样的蒟蒻发一个简单易想的题解吧!!! 这题我一开始一看,woc这不是莫比乌斯反演么,推推推,推到杜教筛,输出结果一看不对 emmm回来仔细想想……woc推错了? 然后撕烤半天打了个暴力,A了 ...
- [CQOI2015]选数(莫比乌斯反演,杜教筛)
[CQOI2015]选数(luogu) Description 题目描述 我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案. 小 z 很好奇这样 ...
- BZOJ3930 [CQOI2015]选数【莫比乌斯反演】
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- P3172 [CQOI2015]选数(莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...
- [BZOJ2045]双亲数(莫比乌斯反演)
双亲数 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 959 Solved: 455[Submit][Status][Discuss] Descri ...
随机推荐
- Python安装遇到的问题
1.import MySQLdb 错误 导入MySQLdb模块时报错: >>> import MySQLdb Traceback (most recent call last): ...
- day07 分支,循环
目录 if(分支) if的语法 if...else... if...elif...else if的嵌套 for循环 for-else 语句 for循环的嵌套(重要) range介绍 while循环 w ...
- CSS——背景图像区域
background-clip属性 background-clip属性指定背景绘制区域 语法 background-clip:border-box|padding-box|content-box; b ...
- 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 ...
- Jmeter中模拟多用户执行多场景操作
1.其实一个用户组就是一个场景(Thread Group).可以在一个测试计划中进行多个场景的执行,在测试计划下加一个全局的User Defined Variables,在这个里面可以设置执行总数to ...
- 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 ...
- 一些css兼容问题
由于各浏览器的不同,会存在一些兼容问题,特别是兼容IE6/7/8 下面简单介绍了一些解决方法,更多问题可以访问 W3help.org来查看. 可以通过js获取浏览器版本 document.body.i ...
- cogs 304. [NOI2001] 方程的解数(meet in the middle)
304. [NOI2001] 方程的解数 ★★☆ 输入文件:equation1.in 输出文件:equation1.out 简单对比时间限制:3 s 内存限制:64 MB 问题描述 已 ...
- 【转载】How to Reset USB Device in Linux
USB devices are anywhere nowadays, even many embedded devices replace the traditional serial devices ...
- 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 ...