• 周日. 10 月 6th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

【数论】欧拉函数

admin

11 月 28, 2021

经过两天的努力 终于把AC大神的课件都看完了 感动啊啊啊TAT 顿时感觉智力上升了一个层次 之后看到数论的题目终于可以不用放弃治疗了~~~ 我会说我刚刚用了十分钟就把欧拉函数看完了吗~~~(其实之前就会-。-)

欧拉函数也就是phi(n) 表示小于等于n的且与n互质的数的个数

欧拉函数的公式是 phi(n)=n*(1-1/p1)*(1-1/p2)*…*(1-1/pn)

要证明这个公式 我们需要先证明一些简单的性质

1.若p为素数 phi(p)=p-1

小于某个素数的数都和这个素数互质- – 显然

2.phi(p^k)=(p-1)*p^(k-1)

小于等于p^k的数中不与p互质的数肯定都是p的倍数

这些数有p^k/p=p^(k-1)个 而总共有p^k个数

所以phi(p^k)=p^k-p(k-1)=(p-1)*p^(k-1)

3.若(a,b)=1 phi(a*b)=phi(a)*phi(b)

AC大神因为欧拉函数是积性函数0 0? 我也不懂为什么- -…

4.若p|a 则phi(p*a)=phi(a)*p

设 a=a’*p^k ((a’,p)=1)

   phi(p^k)*p

=(p-1)*p^(k-1)*p

=(p-1)*p^k

=phi(p^(k+1))

   phi(a)*p

=phi(a’)*phi(p^k)*p

=phi(a’)*phi(p^(k+1))

=phi(a*p)

综上所述

   phi(n)

=phi(p1^a1*p2^a2*…*pn^an)

=phi(p1^a1)*phi(p2^a2)*…*phi(pn^an)

=((p1-1)*p1^(a1-1))*((p2-1)*p2^(a2-1))*…*((pn-1)*pn^(an-1))

=(p1^a1*p2^a2*…*pn^an)*((p1-1)*(p2-1)*…*(pn-1))/(p1*p2*…*pn)

=n*(1-1/p1)*(1-1/p2)*…*(1-1/pn)

得证!

顺便扯些关于欧拉函数的东西- –

欧拉定理:

若(a,n)=1 a^phi(n)=1(mod n)

费马小定理:

当n为质数且(a,n)=1时 a^(n-1)=1(mod n)

费马小定理推论:

这时a的乘法逆元为a^(n-2)

O(n)求欧拉函数代码:

 1 void makepri(){
 2     for (ll i=2;i<=N;i++){
 3         if (!bo[i]){
 4             pri[++pri[0]]=i;
 5             phi[i]=i-1;
 6         }
 7         for (ll j=1;j<=pri[0] && i*pri[j]<=N;j++){
 8             bo[i*pri[j]]=1;
 9             if (i%pri[j]) phi[i*pri[j]]=phi[i]*(pri[j]-1);
10             else{
11                 phi[i*pri[j]]=phi[i]*pri[j];
12                 break;
13             }
14         }
15     }
16 }

View Code

发表回复