线性筛求欧拉函数(转载)

转自: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$ 的大小

我就是这个地方被卡了好多次......


原文地址:https://www.cnblogs.com/Dxy0310/p/9818263.html