[学习笔记] 欧拉函数

欧拉函数

定义

\(\phi(n)\) 表示\(1 ~ n\)中与\(n\)互质的数。
这里有个通项公式\(\phi(n) = n * \prod_{p|k} (1-\frac{1}{p})\)
证明可以先考虑 只有两个质因数的情况,再用数学归纳法去做。

性质

由通式得到

1.若\(n\)是质数,\(\phi(n)=n-1\)
2.若\(n\)是质数,\(\phi(n^k)=n^k*(1-\frac{1}{n})=n^k - n^{k-1}\)
3.若\(n\)\(m\)是质数,\(\phi(n*m) = \phi(n)*\phi(m)\) (积性函数) 可以用通式直接推。
4.若\(n\)为奇数,那么\(n\)没有\(2\)这个质因数,那么\(\phi(2n)=2*\phi(n)*\frac{1}{2}=\phi(n)\)

欧拉公式

1.对于互质的\(a\)\(b\),则\(a^{\phi(b)}\bmod b = 1\)
2.对于互质的\(a\)\(b\),则\(a^{b-1} \bmod b = 1\)

其他

1.所有小于\(n\)\(n\)互质的数的和\(sum = n*\frac{\phi(n)}{2}\)
2.如果\(a \bmod b = 0\),那么\(\phi(a*b) = \phi(a)*b\),否则\(\phi(a*b)=\phi(a)*(b-1)\)
3.\(\sum_{d|n} \phi(d) = n\)
4.\(\sum_{d|n} \mu(d)* \frac{n}{d} = \sum_{d|n} \mu(\frac{n}{d})*d = \phi(n)\)

证明

1.首先一个结论若\(\gcd(n, i) = 0\),那么\(\gcd(n,n-i) = 0\) 说明这些数都是成对出现的,所以可以用类似等差数列的做法证明。

递推求法

inline void init() {
    phi[1] = 1;
    for (int i = 2; i <= n; i++) {
	if (!flag[i]) {
	    prime[++tot] = i;
	    phi[i] = i - 1;
        }
        for (int j = 1; j <= tot && prime[j] * i <= n; j++) {
            flag[i * prime[j]] = 1;
	    if (i % prime[j] == 0) {
	        phi[i * prime[j]] = phi[i] * prime[j];
	    } else {
		phi[i * prime[j]] = phi[i] * phi[prime[j]];
            }
	}
    }
}

posted @ 2020-04-29 19:21  Hock  阅读(162)  评论(0编辑  收藏  举报