题意
对于有序正整数对(a,b),求合法数对个数。
一个(a,b)是合法的,当满足以下条件:
a+b<=n,
ab mod (a+b)=0
对于100%的数据n<=100000000000000。
题解
设gcd(a,b)=d,然后
a’=a/d,
b’=b/d.
那么题目要求的是
d(a′+b′)|a′b′d2
(其中x|y是y mod x=0的意思。)
那么消掉一个d,即求满足
(a′+b′)|a′b′d
的(a,b)对数。
因为有
gcd(a′,b′)=1
,
所以
gcd(a′b′,a′+b′)=1
。
证明:
若xy与x+y有共同质因子p,那么由gcd(x,y)=1得必然有 p|x 或 p|y 。
且 p|x+y ,因为若 p|x 与 p|x+y 同时满足,那么必定会有 p|y ,与gcd(x,y)=1矛盾。
所以就是求满足
(a′+b′)|d
的对数
那么我们设
k=a′+b′
,且要满足
kd<=n
因为d>=k,所以易知道
k<=n√
,这样可以考虑枚举k
因为d<=
nk
,且d是k的倍数,所以有
nk2
个合法的d的取值。
现在我们来考虑对于每一个k有多少满足要求的a’+b’=k. 且gcd(a’,b’)=1.
又因为由
gcd(a'+b',b')=1
,可以推出
gcd(a',b')=1
,
且满足
gcd(a′,b′)=1
,可以推出
gcd(a′+b′,b′)=1
.
所以
gcd(a′+b′,b′)=1
是
gcd(a′,b′)=1
的充分必要条件。
那么当a′+b′=k时,互质数对a′,b′的个数显然为φ(k)种。证明略去。
欧拉函数使用线性筛筛出即可,以前的博客里有。