欧拉函数

在说欧拉函数前,先提一下一个数学关系:互质。

    互质,是一种数学关系,它表示两个数除了1以外没有其他公因子。即对于两
个数a, b而言, 若gcd(a, b) = 1,则称a、b互质。

欧拉函数( φ \varphi φ)

定义

   1 1 1~ N N N中与 N N N互质的数的个数被称为欧拉函数记为 φ ( N ) \varphi(N) φ(N)

1.计算式

φ ( N ) = N × p 1 − 1 p 1 × p 2 − 1 p 2 × ⋯ p m − 1 p m \varphi(N) = N \times \frac{p_1 - 1}{p_1} \times \frac{p_2 - 1}{p_2} \times \cdots \frac{p_m - 1}{p_m} φ(N)=N×p1p11×p2p21×pmpm1
该式可化简为
φ ( N ) = N × ∏ 质 数 p ∣ N ( 1 − 1 p ) \varphi(N) = N\times \prod_{质数p|N}{(1 - \frac{1}{p})} φ(N)=N×pN(1p1)
其中, p p p N N N通过算术基本定理得出的质因子。

  事实上,该式用计算机写的时候并不是特别优,所以我们求 φ ( N ) \varphi(N) φ(N)时并不是用该式来求的。

2.性质
1. ∀ n \forall{n} n > 1,1~ n n n中与 n n n互质的数的和为 n × φ ( n ) ÷ n\times \varphi{(n)} \div n×φ(n)÷ 2

  因为 g c d ( n , x ) = g c d ( n , n − x ) gcd(n , x)=gcd(n , n - x) gcd(n,x)=gcd(n,nx),所以与 n n n不互质的数是成对出现的且若 x x x n n n不互质,则 n − x n - x nx n n n也不互质。所以与 n n n不互质的数的平均数为 n / 2 n/2 n/2,所以与 n n n互质的数的平均数为 n / 2 n/2 n/2,进而得到上述性质。

2.若 a , b a,b ab互质,则 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab) = \varphi(a)\varphi(b) φ(ab)=φ(a)φ(b)

  该性质还可以表示为欧拉函数为积性函数。

3.若 f f f是积性函数,且在算术基本定理中 n = ∏ i = 1 m p i c i n = \prod_{i = 1} ^{m} p_i^{c_i} n=i=1mpici f ( n ) = ∏ i = 1 m f ( p i c i ) f(n)=\prod_{i = 1}^{m}f(p_i^{c_i}) f(n)=i=1mf(pici)

  这其实是所有积性函数的共有性质,实际上就是积性函数的定义的另一种表现。

4.设 p p p 为质数,若 p ∣ n p\mid n pn p 2 ∣ n p^2\mid n p2n,则 φ ( n ) = φ ( n / p ) × p \varphi (n) = \varphi(n / p) \times p φ(n)=φ(n/p)×p

  显然,如果我们将 n n n分解质因数。那么,对于满足上述条件的 p p p而言, n n n n / p n/p n/p一定有相同的质因子,且仅 p p p的指数不同。因此, φ ( n ) \varphi(n) φ(n) φ ( n / p ) \varphi(n / p) φ(n/p)的商为 p p p。所以该性质成立。

5.设 p p p为质数,若 p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n,则 φ ( n ) = φ ( n / p ) × ( p − 1 ) \varphi(n) = \varphi(n / p) \times (p - 1) φ(n)=φ(n/p)×(p1)

  因为 p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n所以 n n n n / p n / p n/p互质。因为欧拉函数为积性函数,所以 φ ( n ) = φ ( n / p ) × φ ( p ) \varphi(n) = \varphi(n/p) \times \varphi(p) φ(n)=φ(n/p)×φ(p),又因为 p p p是质数,易知 φ ( p ) = p − 1 \varphi(p) = p-1 φ(p)=p1。所以该性质成立。

3.求解

  当我们求 φ ( N ) \varphi(N) φ(N)时,如果用计算式求,实际上限制了求的次数。事实上,我们可以利用欧拉函数的几个性质来得出求解方法。

  由欧拉函数性质4性质5可以想到,如果我们就出小于 N N N的所有质数,我们就可以求出 φ ( x ) ( x ∈ [ 1 , N ) ) \varphi(x)(x \in [1 , N)) φ(x)(x[1,N))的值。因此,我们可以利用素数筛,每当找到一个素数,就可以利用欧拉函数的性质4性质5来求出一系列的 φ ( N ) ( N = p × k ) \varphi(N)(N = p\times k) φ(N)(N=p×k),而某一个 N = p × k N = p\times k N=p×k又正好是欧拉筛计算时的过程量。

代码如下

int f[Size], q[Size] , phi[Size];

void make_q(int n)
{
    int top = 0;
    for(int i = 2 ; i <= n ; i++)
    {
    	if(!f[i])
    	{
    	    f[i] = i;
    	    q[top++] = i;
    	}
    	for(int j = 0 ; q[j] <= f[i] && j < top && q[j] < n / i ; j++)
    	{
    	    f[i * q[j]] = q[j];
    	    if(i % q[j] == 0)//性质4
    	    {
    	    	phi[i * q[j]] = phi[i] * q[j];
    	    }
    	    else//性质5
    	    {
    	    	phi[i *q[j]] = phi[i] * phi[q[j]];
    	    }
    	}
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值