转自:https://www.luogu.org/blog/JustinRochester/solution-p2158
根据图像,易得出,所有的点都是关于 $y=x$ 对称的(这个性质我们待会儿要用到)
根据题目,如何判定一个点是否看得到呢?
我们假设一个点看不到,那么,根据图像的直观意义,便可以知道,这个点和原点连线的中间有一个点,假设该点为 $({x over lambda},{y over lambda}),(lambda>1)$
那么,因为该点存在,故该点的横纵坐标都属于整数,即 ${x over lambda} in Z$ , ${y over lambda} in Z$
因此,$lambda |x,lambda |y$
即 $lambda|gcd(x,y)$
因此 $gcd(x,y) geq lambda >1$
也就是说,对于一个点 $(x,y)$ 当且仅当 $gcd(x,y) eq 1$ 时这个点看不到
因此,题目对于给定的 $n$ 所求的点数 $ans(n)$ 即满足
$ans(1)=0$
$ans(n)= sum_{x=0}^{n-1} sum_{y=0}^{n-1} [gcd(x,y)=1],n geq 2$
当然,我们知道 $gcd(0,i)$ 是没有意义的,因此,我们对于某一项为 $0$ 的情况单独拉出来讨论
因为对于 $x=0$ 和 $y=0$ 的直线上,只有 $(0,1),(1,0)$ 两个点看得到
所以这边可以来一个特殊化处理,从而得到
$ans(n)= sum_{x=1}^{n-1} sum_{y=1}^{n-1} [gcd(x,y)=1]+2,n geq 2$
显然,这个式子可以展开为
$ans(n)=sum_{x=1}^{n-1} sum_{y=1}^{x-1}[gcd(x,y)=1]+ sum_{x=1}^{n-1} sum_{y=x}^x [gcd(x,y)=1] + sum_{x=1}^{n-1} sum_{y=x+1}^{n-1}[gcd(x,y)=1]+2,n geq 2$
又因为 $y=x$ 上能被看到的点只有点 $(1,1)$ ,所以我们可以直接考虑这个点,然后忽略这条直线了
因此,我们可以将这个式子化简为
$ans(n)=sum_{x=1}^{n-1} sum_{y=1}^{x-1}[gcd(x,y)=1]+ 1 + sum_{x=1}^{n-1} sum_{y=x+1}^{n-1}[gcd(x,y)=1]+2,n geq 2$
即
$ans(n)=sum_{x=1}^{n-1} sum_{y=1}^{x-1}[gcd(x,y)=1] + sum_{x=1}^{n-1} sum_{y=x+1}^{n-1}[gcd(x,y)=1]+3,n geq 2$
由文章最上方写的图像的原理,我们可以知道
$sum_{x=1}^{n-1} sum_{y=1}^{x-1}[gcd(x,y)=1]= sum_{x=1}^{n-1} sum_{y=x+1}^{n-1}[gcd(x,y)=1]$
因此 $ans(n)=2sum_{x=1}^{n-1} sum_{y=1}^{x-1}[gcd(x,y)=1]+3,n geq 2$
又因为根据欧拉函数 $varphi (n)$ 的定义,为小于 $n$ 且与 $n$ 不互质的数
即 $varphi (n)=sum_{i=1}^{n-1} [gcd(i,n)=1]$
因此,我们可以将式子简化为
$ans(n)=2sum_{x=1}^{n-1} varphi(x) +3,n geq 2$
那么,根据定义,可以直接知道 $varphi(1)=0$
所以,式子我们也可以这么写
$ans(n)=2sum_{x=2}^{n-1} varphi(x) +3,n geq 2$
终于,我们得到了本题的答案
$ans(1)=0$
$ans(n)=2 sum_{x=2}^{n-1} varphi(x)+3 , n geq 2$
那么,这里对于如何求 $varphi(n)$ 做一个讲解,已经掌握的大佬们请直接跳过
首先, $varphi(n)$ 的定义是在小于 $n$ 的正整数中,与 $n$ 互质的数的个数
因此,我们先考虑一下,假设存在一个质数 $p$
那么, $p$ 的因数只有 $1$ 和 $p$
在小于 $p$ 的正整数中,不存在任何数含有因数 $p$
因此, $p$ 和任意比它小的正整数都互质
也就是性质1 $varphi(p)=p-1$ ( $p-1$ 个数比它小)
接下来,我们考虑 $p^k,k in Z_+$ 且 $k>1$
$p^k$ 有且仅有质因数 $p$
且比它小的 $(p^k-1)$ 个数中,存在一下几个数也含有质因数 $p$
$p,2p,3p,4p......(p^{k-1}-1)p$
共 $(p^{k-1}-1)$ 个数
因此,剩余的 $(p^k-1)-(p^{k-1}-1)=(p^k-p^{k-1})$ 个数都与之互质
于是我们可以把 $k=1$ 看成这个的一个特例
于是我们得到性质2 $varphi(p^k)=p^k-p^{k-1},k in Z_+$
同时,又因为 $varphi(p^{k+1})=p^{k+1}-p^k=p imes(p^k-p^{k-1})$
所以,还能得到性质3 $varphi(p^{k+1})=p imes varphi(p^k)$
接下来,我们考虑 $varphi(p_1^{k_1} p_2^{k_2})$
$(p_1 eq p_2$ 且 $p_1,p_2$ 为质数 $,k_1,k_2 in Z_+)$
那么,在比它小的 $(p_1^{k_1} p_2^{k_2}-1)$ 个数中
$p_1,2p_1,3p_1,4p_1......,(p_1^{k_1-1} p_2^{k_2}-1)p_1$ 共 $(p_1^{k_1-1} p_2^{k_2}-1)$ 个数与它的最大公因数中含 $p_1$
同理,共 $(p_1^{k_1} p_2^{k_2-1}-1)$ 个数与它最大公因数含 $p_2$
但是,这里还有这重复枚举
$p_1p_2,2p_1p_2,3p_1p_2,4p_1p_2......(p_1^{k_1-1} p_2^{k_2-1}-1)p_1p_2$ 共 $(p_1^{k_1-1} p_2^{k_2-1}-1)$ 个数被重复枚举
因此,根据容斥原理,我们可以得到
$varphi(p_1^{k_1}p_2^{k_2})$
$=(p_1^{k_1} p_2^{k_2}-1)-(p_1^{k_1-1} p_2^{k_2}-1)-(p_1^{k_1} p_2^{k_2-1}-1)+(p_1^{k_1-1} p_2^{k_2-1}-1)$
$=p_1^{k_1} p_2^{k_2}-p_1^{k_1-1} p_2^{k_2}-p_1^{k_1} p_2^{k_2-1}+p_1^{k_1+1} p_2^{k_2+1}$
$=(p_1^{k_1}-p_1^{k_1-1})(p_2^{k_2}-p_2^{k_2-1})$
又因为根据性质2,有
$varphi(p_1^{k_1})=(p_1^{k_1}-p_1^{k_1-1}),varphi(p_2^{k_2})=(p_2^{k_2}-p_2^{k_2-1})$
因此,带入上式得到性质4 $varphi(p_1^{k_1}p_2^{k_2})=varphi(p_1^{k_1})varphi(p_2^{k_2})$
综合以上5个性质,我们假设 $n=Pi_{i=1}^mp_i^{k_i}$
可得性质6 $varphi(n)=varphi(Pi_{i=1}^mp_i^{k_i})=Pi_{i=1}^mvarphi(p_i^{k_i})=Pi_{i=1}^m(p_i^{k_i}-p_i^{k_i-1})$
故此,我们对任意数的欧拉函数值都可求了
同样的,性质6整理还可得到
性质7 $varphi(n)=Pi_{i=1}^m(p_i^{k_i}-p_i^{k_i-1})=Pi_{i=1}^mp_i^{k_i}(1-{1 over p_i})=nPi_{i=1}^m(1-{1 over p_i})$
因此,对于本蒟蒻所知的 $varphi(n)$ 函数性质已经全部讲完(愣是码了三天......)
那么,我们开始讲线性筛
参考素数的线性筛,为了保证时间的线性,那么,就必须保证每个数只筛到一次
为了保证每个数只被筛到一次,一定要保证其只被其最小素因数筛到过
那么,线性筛 $varphi(n)$ 也是一样
对于枚举到的 $i(i geq 2)$,我们用 $pf_i$ 储存它的最小质因数
倘若出现 $pf_i=0$,则说明 $i$ 的最小质因数在 $2$~$(i-1)$ 都并未出现
因此,足以证明 $i$ 为质数
所以,$pf_i=i,varphi(i)=i-1$ ,并将 $i$ 存入到质数表中
接下来,无论 $i$ 是否为质数,直接在质数表中枚举质数 $prime_j$
倘若 $prime_j leq pf_i$ 那么,显然 $pf_{i imes prime_j}=prime_j$
若 $prime_j|i$ 那么就说明 $i$ 含有质因数 $prime_j$
因此, $varphi(i imes prime_j)=prime_j imes varphi(i)$
否则,说明不含
则 $varphi(i imes prime_j)=varphi(prime_j) imes varphi(i)$
倘若 $prime_j > pf_i$ 那么,数 $i imes prime_j$ 将被数 ${i imes prime_j over pf_i}$ 筛到,这里可以直接开始跳出
最后,注意质数表的大小和 $i imes prime_j$ 的大小
我就是这个地方被卡了好多次......