欧拉定理:
设 n ,m ∈ N+ ,gcd(n,m) = 1 , 则
≡ 1(mod m);
我们先来看一个欧拉函数 φ(n):
当n为质数时,φ(n) = n - 1;
根据质因数分解:
N =
![]()
.......
费马小定理:
根据欧拉定理,若m为质数,则
≡ 1(mod m);
求欧拉函数的值:
//朴素做法
int get_euler(int n)
{
int res = n;
for(int i=2;i<=n/i;i++)
{
if(n%i == 0)
{
res = res / i * (i-1);
while(n%i == 0) n /= i;
}
}
if(n>1) res = res / n *(n-1);
return res;
}
//筛法
LL get_euler(int n)
{
phi[1] = 1;
for(int i=2;i<=n;i++)
{
if(!st[i])
{
prime[++cnt] = i;
phi[i] = i-1;
}
for(int j =1;prime[j] <= n/i ;j++)
{
st[prime[j] * i] = true;
if(i % prime[j] == 0)
{
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
else
{
phi[prime[j] * i] = phi[i]*( prime[j] - 1);
}
}
}