欧拉函数

定义:

欧拉函数是小于$n$的正整数中与n互质的数的数目($\varphi(1)=1$)。

通项公式:

$\varphi (n)=n\prod_{i=1}^k(1-\frac{1}{p_i})$,其中$p_1,p_2...p_k$是$n$的所有素因子。

性质一:

若$n$为质数,则

$\varphi (n)=\varphi(2*n)$

证明:

因为$n$为质数,所以只有$n$的倍数与它不互质。

因为$\varphi(n)=n-1$,$\varphi(2*n)=2*n-n-1$($n$个偶数,$1$个$n$),所以$\varphi (n)=\varphi(2*n)$。

性质二:

若$n$为一个质数$p$的k次方$p^k$,则

$\varphi (p^k)=p^k-p^{k-1}$

证明:

因为因为$p$为质数,所以只有$p$的倍数与它不互质。

从$1$到$p^k$一共有$p^{k-1}$个$p$的倍数,所以$\varphi(p^k)=p^k-p^{k-1}=p^k(1-\frac {1}{p})$。

性质三:

$\varphi(n)$是一个积性函数.

当$m$,$n$互质时,

$\varphi(nm)=\varphi(n)*\varphi(m)$

证明:

构造以下矩阵

\begin{matrix}
1& 2& 3&...&m\\ 
n+1&n+2 & n+3&...& n+m\\ 
2*n+1&2*n+2&2*n+3&...&2*n+m\\ 
.&.& . & . & .\\ 
.&.& . & . & .\\ 
.&.& . & . & .\\ 
(n-1)*m+1& (n-1)*m+2 & (n-1)*m+3 & ... & n*m
\end{matrix}

这个$n*m$的矩阵包括了$1$到$n*m$的所有整数。我们发现第一行有$\varphi(m)$个与$m$互质的数。因为若一个数$i$与$m$互质,$k*m+i$也与$m$互质。所以之后的$(n-1)$行也是每一行都有$\varphi(m)$个与m互质的数。

那么每一列是不是也是$\varphi(n)$个呢?是的。我们可以证明这$n$个数$mod n$互不相同。

我们假设存在两个数$mod n$相等。设这两个数为$k1$,$k2$。

因为两个数$mod n$相等,所以$k1=m1*n+r$,$k2=m2*n+r$。

又因为

$k1=q1*m+s,$,$k2=q2*m+s$

所以

$q1*m+s-q2*m-s=m1*n+r-m2*n-r$

$(q1-q2)*m=(m1-m2)*n$

因为$m$与$n$互质,所以$(q1-q2)$是$n$的倍数。又因为$(q1-q2)$最大值是$n-1$,所以$(q1-q2)$不是$n$的倍数,与假设矛盾。故没有两个数$mod n$相等。

通过上面的结论,我们可以得出每一行有$\varphi(n)$个与$n$互质的数。

所以整个矩阵中与$n$和$m$都互质的数有$\varphi(n)*\varphi(m)$个,即$\varphi(n*m)$。证毕。

证明通项公式:

因为$n$的所有质因子互质,所以$\varphi(n)=\varphi(\prod_{i=1}^{k}p_i^{c_i})$。其中$p_i$是$n$的所有质因子,$c_i$是$p_i$的指数。

根据性质二,

$\varphi(n)=\prod_{i=1}^{k} p_i^{c_i}\varphi(1-{}\frac{1}{p_i})$
$\varphi(n)=n\prod_{i=1}^{k}\varphi(1-{}\frac{1}{p_i})$

所以欧拉函数通项公式为

$\varphi(n)=n\prod_{i=1}^{k}\varphi(1-{}\frac{1}{p_i})$。

性质四:欧拉定理

对于任意互质的两个正整数$a$,$n$,有$a^{\varphi(n)}\equiv 1(mod n)$。

证明:将$1$到$n$中的每一个与$m$互质的数按照$mod n$的大小排序:$x_1$,$x_2$,$x_3...x_{\varphi(n)}$。

设$m_i=a*x_i$

1.$m$中的数$(mod n)$不同余。

证明:

假设$m_i$与$m_j$同余且$m_i>m_j$

则$a*x_i=q_i*n+r$,$a*x_j=q_j*n+r$

所以$a*(x_i-x_j)=n*(q_i-q_j)$

因为$a$与$n$互质,所以$(x_i-x_j)$必定为$n$的倍数。

又因为$(x_i-x_j)<n$

所以与假设矛盾。故$m$中的数$(mod n)$不同余。

2.$m$中的数与$n$取模的结果与$n$互质。

证明:设余数与$n$有公因子$r$

则$a*x_i=qn+pr=r(\frac{qn}{r}+p)$

因为$\frac{qn}{r}+p$是整数,所以$a*x_i$含有因数$r$,这意味着$a*x_i$与$n$不互质。而这与上面的结论矛盾。故$m$中的数与$n$取模的结果与$n$一定互质。

由1,2,可知,$m$中的数经过重新排列,必定模$n$同余于$x$

也就是

$\prod_{i=1}^{\varphi(n)}m_i \equiv \prod_{i=1}^{\varphi(n)}x_i (mod n)$

变形

$a^{\varphi(n)}\prod_{i=1}^{\varphi(n)}x_i \equiv \prod_{i=1}^{\varphi(n)}x_i (mod n)$

$(a^{\varphi(n)}-1)*\prod_{i=1}^{\varphi(n)}x_i \equiv 0 (mod n)$

所以

$(a^{\varphi(n)}-1)*\prod_{i=1}^{\varphi(n)}x_i|n$

因为$x_i$与$n$互质,所以

$a^{\varphi(n)}-1 \equiv 0 (mod n)$

$a^{\varphi(n)} \equiv 1 (mod n)$

性质五:

对于正整数$n$,有

$\sum_{i|n}\varphi(i)=n$。

证明:

设$F(n)$等于$\sum_{i|n}\varphi(i)$

设$m$是与$n$互质的一个正整数。

所以$F(n)*F(m)=\sum_{i|n}\varphi(i)*\sum_{i|m}\varphi(i)$

因为当$n$,$m$互质时,$\varphi(n*m)=\varphi(n)*\varphi(m)$

又因为$n$,$m$互质,所以$n$和$m$的因数两两互质。

所以$F(n)*F(m)=\sum_{i|n}\sum_{j|m}\varphi(i*j)$

因为$\sum_{i|n}\sum_{j|m}\varphi(i*j)$包括了$n*m$的所有因数。

所以$F(n)*F(m)=F(n*m)$

所以$F(n)$是积性的。

考虑$n$的所有质因子$p$

$F(p_i^{c_i})=\sum_{k=1}^{c_i-1}\varphi(p_i^k)$

$F(p_i^{c_i})=\sum_{k=1}^{c_i-1}p_i^k-p_i^{k-1}+1$

$F(p_i^{c_i})=p_i^{c_i}$

设$n$有$m$个质因子

$F(n)=\prod_{i=1}^{m}p_i^{c_i}$

$F(n)=n$

性质六:

对于一个大于$2$的正整数$n$,$\varphi(n) \equiv 0 (mod 2)$。

证明:

假设$m$与$n$互质,且$n>m$,则$gcd(n,m)=gcd(n,n-m)=1$,这表明与$n$互质的数是成对存在的。

性质7:

对于一个正整数$n$和一个素数$p$

如果$p|n$且$p^2|n$,则$\varphi(n)=\varphi(\frac{n}{p})*p$

如果$p|n$且$p^2\not | n$,则$\varphi(n)=\varphi(\frac{n}{p})*(p-1)$

证明:

因为$p|n$且$p^2|n$,所以$n$与$\frac{n}{p}$有相同的质因子。

所以


$\frac{\varphi(n)}{\varphi(\frac{n}{p})}=\frac{n\prod_{i=1}^{k}(1-\frac{1}{p_i})}{\tfrac{n}{p}\prod_{i=1}^{k}(1-\frac{1}{p_i})}=\frac{n}{\frac{n}{p}}=p$


如果$p|n$且$p^2\not | n$,说明$p$与$\frac{n}{p}$互质,

所以

$\varphi(p*\frac{n}{p})=\varphi(p)*\varphi(\frac{n}{p})=\varphi(\frac{n}{p})*(n-1)$

线性筛:

void work(int n)
{
    prime[1]=0;
    num[1]=1;
    int i,j;
    for(i=2;i<=n;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            prime[++prime[0]]=i;
            num[i]=i-1;
            continue;
        }
        for(j=1;j<=prime[0]&&prime[j]*i<n;j++)
        {
            vis[prime[j]*i]=1;
            if(i%prime[j]==0)
            {
                num[i*prime[j]]=num[i]*prime[j];
                break;
            }
            num[prime[j]*i]=num[i]*(prime[j]-1);
        }
    }
}

 这是蒟蒻的第一篇数学博文,写的很丑请见谅。如果有错误的话,在评论里疯狂d我,我会fix的。

posted @ 2019-07-31 20:37  星辰节度使  阅读(491)  评论(6)    收藏  举报