数论——7
作者:
就是要AC
,
2021-04-29 11:03:44
,
所有人可见
,
阅读 385
7. 欧拉函数
欧拉函数的常用性质:
1.如果n,m互质,则ϕ(nm)=ϕ(n)ϕ(m)1.如果n,m互质,则ϕ(nm)=ϕ(n)ϕ(m);
2.小于等于n,且与n互质的数的和是ϕ(n)×n/22.小于等于n,且与n互质的数的和是ϕ(n)×n/2;
3.欧拉定理:如果n,a互质,且均为正整数,则aϕ(n)≡1(modn)3.欧拉定理:如果n,a互质,且均为正整数,则aϕ(n)≡1(modn);
欧拉函数
int phi(int x)
{
int res = x;
for (int i = 2; i <= x / i; 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;
}
筛法求欧拉函数
int primes[N], cnt; // primes[]存储所有素数
int euler[N]; // 存储每个数的欧拉函数
bool st[N]; // st[x]存储x是否被筛掉
void get_eulers(int n)
{
euler[1] = 1;
for (int i = 2; i <= n; i ++ )
{
if (!st[i])
{
primes[cnt ++ ] = i;
euler[i] = i - 1;
}
for (int j = 0; primes[j] <= n / i; j ++ )
{
int t = primes[j] * i;
st[t] = true;
if (i % primes[j] == 0)
{
euler[t] = euler[i] * primes[j];
break;
}
euler[t] = euler[i] * (primes[j] - 1);
}
}
}
典型例题
欧拉函数
筛法求欧拉函数