欧拉函数及定理浅谈
什么是
(欧拉函数)
是指在
中与x互质的数。
我们先不说它有什么用处,先来讲一讲求法。
少量或数据较大的求法
时间复杂度
代码如下:
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;
}
大量较小的数据的方法:欧拉筛
时间复杂度
其思路便是在欧拉筛质数的时候顺便求出
代码如下:
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;
}
欧拉函数的作用
在这里为了更方便的解释欧拉函数的作用,我们先引入一个概念
欧拉定理
对于
的
两个数
有:
再介绍一个欧拉定理的特殊情况
费马小定理
费马小定理
当
是质数的时候,且
不是
的倍数时
在这里,我们可以知道
故而
所以我们可以说费马小定理是欧拉定理的一个特殊情况
那么如果当
的情况呢
这个时候我们有结论:
我们便可以用这个来降幂