欧拉函数及定理浅谈

欧拉函数及定理浅谈

什么是 φ \varphi (欧拉函数)

φ ( x ) \varphi(x) 是指在 1 x 1 1 \rightarrow x-1 中与x互质的数。

我们先不说它有什么用处,先来讲一讲求法。

少量或数据较大的求法 \longrightarrow 时间复杂度 O ( n ) O(\sqrt{n})

代码如下:

int phi(int x)
{
    int res = x;
    for (int i = 2;i * i <= x; i++)
        if (x % i == 0)
        {
            res = res / i * (i - 1);
            while (x % i == 0) x /= i;
        }
    if (x > 1)
        res = res / x * (x - 1);
    return res;
}

大量较小的数据的方法:欧拉筛 \rightarrow 时间复杂度 O ( n ) O(n)

其思路便是在欧拉筛质数的时候顺便求出 φ \varphi

代码如下:

const int N = 1e6 + 5, M = 7.85e4;
int prime[M], phi[N], cnt;
void Euler()
{
    for (int i = 1;i < N; i++)
        phi[i] = i;
    for (int i = 2;i < N; i++)
    {
        if (phi[i] == i)
            prime[++cnt] = i, phi[i] = i - 1;
        for (int j = 1;j <= cnt and i * prime[j] < N; j++)
            if (i % prime[j])
                phi[i * prime[j]] = phi[i] * (prime[j] - 1);
            else
            {
                phi[i * prime[j]] = phi[i] * prime[j];
                break;
            }
    }
    return;
}

欧拉函数的作用

在这里为了更方便的解释欧拉函数的作用,我们先引入一个概念

欧拉定理

对于 g c d ( a , b ) = 1 gcd(a, b) = 1 a , b a, b 两个数

有: a φ ( b ) 1 ( m o d   b ) a^{\varphi(b)}\equiv1(mod\ b)

再介绍一个欧拉定理的特殊情况 \rightarrow 费马小定理

费马小定理

p p 是质数的时候,且 a a 不是 p p 的倍数时

a p 1 1   ( m o d   p ) a^{p-1} \equiv 1\ (mod\ p)

在这里,我们可以知道 φ ( p ) = p 1 \varphi(p) = p - 1

故而 a φ ( p ) = a p 1 a^{\varphi(p)}=a^{p-1}

所以我们可以说费马小定理是欧拉定理的一个特殊情况


那么如果当 g c d ( a , b ) 1 gcd(a, b) \neq 1 的情况呢

这个时候我们有结论:

a c a c   m o d   φ ( m ) , g c d ( a , m ) = 1 a^c\equiv a^{c\ mod\ \varphi(m)}, gcd(a, m) = 1

a c a c , g c d ( a , m ) 1 , c < φ ( m ) a^c\equiv a^c, gcd(a, m) \neq 1, c < \varphi(m)

a c a c   m o d   φ ( m ) + φ ( m ) , g c d ( a , m ) 1 , c φ ( m ) a^c\equiv a^{c\ mod\ \varphi(m)+\varphi(m)}, gcd(a, m)\neq1,c\geq\varphi(m)

我们便可以用这个来降幂

例题

super a ^ b mod c

sum

Thanks!

原创文章 23 获赞 41 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43537070/article/details/103221866