遇到了一个欧拉函数的题,于是就四处搜刮资料,拼凑出这个博客。
1.函数内容
定义:在数论,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的个数,记为 φ ( n ) \varphi(n) φ(n)。特别的, φ ( 1 ) = 1 \varphi(1)=1 φ(1)=1。
通式: φ ( n ) = n ∏ i = 1 k ( 1 − 1 p i ) , p 1 , p 2 , . . . , p k 是 n 的 所 有 质 因 数 \varphi(n)=n\prod_{i=1}^k(1-\frac1{p_i})\quad,p_1,p_2,...,p_k是n的所有质因数 φ(n)=n∏i=1k(1−pi1),p1,p2,...,pk是n的所有质因数
2.编程实现
①求 φ ( x ) \varphi(x) φ(x)
int euler(int n)
{
int t=n, sn=sqrt(n+1);
for(int i=2; i<=sn; ++i)
{
if(n%i==0)
{
t=t/i*(i-1);
while(n%i==0) n/=i;
}
if(n==1) break;
}
if(n>1) t=t/n*(n-1);
return t;
}
②求 φ ( 1 ) \varphi(1) φ(1)~ φ ( n ) \varphi(n) φ(n)
void euler(int n)
{
e[1]=1;
for(int i=2; i<=n; ++i)
{
if(!e[i])///i is a prime
{
for(int j=i; j<=n; j+=i)
{
if(!e[j]) e[j]=j;
e[j]=e[j]/i*(i-1);
}
}
}
return;
}
③线性求1~n的所有素数和
φ
(
1
)
\varphi(1)
φ(1)~
φ
(
n
)
\varphi(n)
φ(n)
下面用到的一些公式会在“相关性质”中说明。
void Euler(int n)
{
notprime[1]=true;
e[1]=1;
for(int i=2; i<=n; ++i)
{
if(!notprime[i])
{
prime[pn++]=i;
e[i]=i-1;
}
for(int j=0; j<pn&&prime[j]*1ll*i<=n; ++j)
{
notprime[prime[j]*i]=true;
if(i%prime[j]==0)
{
e[prime[j]*i]=e[i]*prime[j];
break;
}else
{
e[prime[j]*i]=e[i]*(prime[j]-1);
}
}
}
return;
}
以上代码可用百度百科“欧拉函数”词条中的欧拉函数表验证。
3.相关性质
- m 、 n 互 质 → φ ( m × n ) = φ ( m ) × φ ( n ) m、n互质\to \varphi(m \times n)=\varphi(m)\times \varphi(n) m、n互质→φ(m×n)=φ(m)×φ(n)
- i m o d p = 0 → φ ( i × p ) = φ ( i ) × p i \quad mod \quad p=0\to\varphi(i \times p)=\varphi(i) \times p imodp=0→φ(i×p)=φ(i)×p
- i m o d p = 0 且 i p m o d p ! = 0 且 p 为 质 数 → φ ( i ) = φ ( i p ) × ( p − 1 ) i \quad mod \quad p=0 且 \frac ip \quad mod \quad p!=0且 p为质数 \to \varphi(i)=\varphi(\frac ip) \times (p-1) imodp=0且pimodp!=0且p为质数→φ(i)=φ(pi)×(p−1)
- 欧拉定理:
x
与
p
互
质
→
x
φ
(
p
)
=
1
(
m
o
d
p
)
x与p互质\to x^{\varphi(p)}=1(mod \quad p)
x与p互质→xφ(p)=1(modp)
费马小定理: p 为 质 数 → x p − 2 = 1 ( m o d p ) p为质数 \to x^{p-2}=1(mod\quad p) p为质数→xp−2=1(modp) - n 为 奇 数 → φ ( n × 2 ) = φ ( n ) × 2 n为奇数\to \varphi(n \times 2)=\varphi(n)\times 2 n为奇数→φ(n×2)=φ(n)×2
- 小于p且与p互质的数之和为 φ ( p ) ∗ p 2 \frac{\varphi(p)*p}2 2φ(p)∗p,因为若x与p互质,则p-x也与p互质
2020.1.31
资料来源:
[1]百度百科“欧拉函数”
[2]数论基础——欧拉函数.csdn博客