欧拉函数求法与应用

欧拉函数简介:

写在后面:

欧拉函数朴素地器:开价n为1至n的互质数。

精确地解说与简略使具有特征

欧拉函数在OI中是个非常重要的东西,免得你不变卖,你会蒙受很大的丢失。

欧拉函数用希腊字母φ表现,φ(N)表现N的欧拉函数.

n的值,本人可以浅显地投合心意为心不在焉n的数。

欧拉函数的稍许地使具有特征:

1.素数p, φ(p)=p-1,说起两个素数p,q φ(pq)=pq-1

欧拉函数是积性函数,但它责备东西全部综合的函数。

显示出:

函数的全部性是:若m,n互堆,(Mn)=φ(m)n(n),n互堆”可知m,非协同元素,因而φ(m)φ(n)=m(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)·n(1-1/P1’)(1-1/P2’)(1-1/p3”)…(1-1/pn”),在家,P1,p2,P3…PN是M的头等元素。,P1’,P2’,P3’…PN是N的次要元素。,而m,非协同元素,P1,p2,p3…pn,P1’,P2’,P3’…PN是形形色色的的。,P1,p2,p3…pn,P1’,P2’,P3’…PN是Mn的全部堆元素和Mn F的全部性,因而φ(mn)=mn(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)(1-1/P1’)(1-1/P2’)(1-1/p3”)…(1-1/pn”),依据,(MN)=φ(m)φ(n)

执意,φ(MN)=φ(n)**(m)仅在(n)中。,m)=1。

2.鉴于东西无符号概数N的素数幂使分解N=P1^q1*P2^q2*…*Pn^qn.

   φ(N)=N*(1-1/P1)*(1-1/P2)*…*(1-1/Pn).

三。n=2,Phi(n)都是偶数。

4。设n为无符号概数。,∑φ(d)=N (d|N).

基准合理地2,本人可以在O(sqrt(n))的时间内求出东西数的欧拉函数值.

免得本人想要1000000里边所胸中有数的欧拉函数,怎么办.

前述的办法的不均一将高达O(n*SqRT(n))。

让本人看一眼线性的筛的顺序。


加密发明:

它遍历O(n)小时的所胸中有数字。,此外很多额定的物。,

这么地本人是责备能在筛素数的同时求出所胸中有数的欧拉函数呢.

答案是必定的。

φ(n)=n*(1-1/p1)(1-1/p2)….(1-1/pk),在家,P1、p2…PK是N的次要元素。。
譬如:φ(12)=12*(1-1/2)(1-1/3)=4。
最好用大约。,你可以运用像素数类似于的滤网。。
率先筛出n内掌握的素数。,那时用素数滤除每数字的值。。
拿 … 来说,在10里边找到所胸中有数字的值。:
设置PHI大厦〔11〕,开胃小吃φ〔1〕=1,φ〔2〕=2…φ〔10〕=10;
那时从2开端传送。,2的有时的值是*(1-1/2)。,则phi[2]=2*1/2=1,φ〔4〕=4×1/2=2,φ〔6〕=6×1/2=3。;
再是3,3的有时的值是(1-1/3)。,则phi[3]=3*2/3=2,φ〔6〕=3×2/3=2,φ〔9〕;
再5,此外7个…因本人对每个素数都这么地做。,依据一点东西n都利润了φ(n)=n*(1-1/p1)(1-1/p2)….(1-1/pk)的运算
根据我所持的论点大约滤网不费力地运用。,也运用前东西数的掌握以代理商的身份行事积和。。
加密如次:

 
筛法求欧拉函数

void Init(){   
     euler[1]=1;  
     为(int) i=2;i


欧拉函数的适用

本人变卖,东西数k可以使分解为p1^(q1)*p2^(q2)

这么地,这数字的以代理商的身份行事数是(1 q1)*(1 q2)*…*(1+qk)

发明:

假定的n,M追求GCD(I),n)>m的i数。

本人可以使分解n=a*b。, i=a*d(b>=d 且b,D彼此堆,因而本人必要的是当a=m(b由a决议)时的d数字。

鉴于B>=D和B,三维互堆,因而这数字字是φ(b)-1  

可是,免得你为每个A倾斜B,拨准的快慢加班。(O(N-M)*SqRT(n)的不均一)

可是,免得掌握的细目都这么地简略,它们依然会老一套。,因而本人不可忍住的想出东西办法来优化结成它。。

本人可以半细目,嗨折半不如两一分钱。。

让本人先看一下,当本人倾斜,当i后SqRT(n) 有东西B= N/I,本人观察到当n%i=0时,将会有一种限制。,它是a*b==n。依据,本人不得不倾斜SqRT(n)的限制。,那时,它对应于限制。 n/i。

本人的计数会快得多。

  1. #include <  
  2. #include <  
  3. #include   
  4. #include   
  5. #include   
  6. #include <  
  7. #include <  
  8. #include   
  9. #include   
  10.   
  11. using namespace std;  
  12.   
  13. int euler(int n)  
  14. {  
  15.     int res=n;  
  16.     for(int i=2;i*i<=n;i++){  
  17.         if(n%i==0){  
  18.            res=res/i*(i-1);  
  19.            while(n%i==0) n/=i;  
  20.         }  
  21.     }  
  22.     if(n>1) res-=res/n;  
  23.     return res;  
  24. }  
  25.   
  26. int main()  
  27. {  
  28.     int t;  
  29.     scanf(“%d”,&t);  
  30.     while(t–){  
  31.         int n,m;  
  32.         scanf(“%d%d”,&n,&m);  
  33.         int ans=0;  
  34.         for(int i=1;i*i<=n;i++){  
  35.             if(n%i==0){  
  36.                 if(i>=m)ans+=euler(n/i);   
  37.                 if(n/i>=m&&i*i!=n) ans+=euler(i); 
    /(忍住)两倍全部平方运算。
  38.             }  
  39.         }  
  40.         printf(“%d\n”,ANS)
  41.     }  
  42.     return 0;  
  43. }  

本人能够睬嗨的东西成绩。:鉴于掌握心不在焉n的数字,和N互质的数和N的合作的并不克不及遮盖从1到N的所胸中有数,拿 … 来说,n=6。,4既责备6以代理商的身份行事,也责备6互质。,鉴于掌握的元素,GCD的总和是无可比拟的(简略阵列和结成)。,但这些数字既责备元素,也责备互质。,事实没这么地简略。。

因而据我看来了解魄力。,可是搜索战败了一部分地。。存款是二元系搜索不得不搜索东西数字元素。,就像如今N=6。,4未被搜索。

因而,据我看来用可分性搜索掌握的数字。,是不值得讨论的的

综合的函数的适用:

数论打中产品函数:无符号概数n的东西函数 f(n),F(1)=1和A,彼此堆,F(ab)=f(a)f(b),它高处数论打中综合的函数。。免得函数f(n)契合f(1)=1,偶数的是,心不在焉彼此的气质,F(ab)=f(a)f(b),它高处全部可积函数。。

欧拉函数,GCD(n),K(当k是集中的)是综合的函数。

当我,国际黄金时段,GCD(I)*j,m)=gcd(i,m)*gcd(j,m),因而GCD(n),K)是东西综合的函数。

同时,综合的函数的和也东西综合的函数。

发明如次:

能够可是像我大约的人不克不及这么地做。。。。

看一眼莱德神(我的名字似乎是)。。。解说,稍许地投合心意:

神灵连接

它次要关涉东西可积性的事物。:f(x*y)=f(x)*f(y),初等数学常常被指出。。

积性函数此外个使具有特征执意综合的函数的和也东西综合的函数。。

可以利润东西式子f(n)=f(p1^a1)*f(p2^a2)*f(p3^a3)*…*f(pk^ak)。但本人如今不变卖大约词是什么。,6666666666666666。

看成绩,免得n和m是互质的,那时GCD(I),n*m)=GCD(Ⅰ),n)*GCD(I),m)。∴GCD(I),n)是东西综合的函数=>σgCD(i),n)是东西综合的函数。。

设f(n)=ΣGCD(I),n),成绩转变为找寻掌握f(π^ ai)。

让本人看一眼上面的F(π^ ai)。:

率先明白,免得p是n的除数,那时朝某一方向前进GCD(i),n的i数是==p(n/p)。

显示出:GCD(I),n)==p。设i=k*p,n=m*p。

那时GCD(K),m)=1,执意,K和M是互质的。,必要符合必须先具备的的i数字。,是找出对应于k的k数字。,即求m的欧拉函数,m=n/p,依据符合必须先具备的的i的数字是m(n/p)。。

好了,用大约规律找到f(π^ ai),即细目πai的每个以代理商的身份行事(性质上,π^)。,t<=ai),那时求使GCD(I),pi^ai)==pi^t符合的i的数字,因而 数字*pi^t执意想要的答案的一一部分。

词:f(pi^ai)=Φ(pi^ai)+pi*Φ(pi^(ai-1))+pi^2*Φ(pi^(ai-2))+…+pi^(ai-1)* Φ(pi)+pi^ai*Φ(1);

嗨可以把求欧拉函数的一部分化简,因f(π^ ai)中可是东西除数π,因而:

Φ(pi^ai)=pi^ai-pi^(ai-1)。

显示出:心不在焉πai的无符号概数的数量是p^ ai – 1个;

在家,具有πai的无符号概数责备互质的。(pi*1,pi*2,…,pi*(pi^(ai-1)-1)
)
合计 pi^(ai-1)-1个。

Φ(pi^ai)=pi^ai
-1 -(pi^(ai-1)-1)=pi^ai-pi^(ai-1)

那时把它类别。:f(pi^ai)=pi^ai*(1+ai*(1-1/pi))。

因而,f(n)=n*(1+a1*(1-1/p1))*(1+a2*(1-1/p2))*.……
=n* π(ai*pi+pi-ai)/pi;

本题处理!!!

写了两个小时。,写期满,获得知识本人薄弱虚弱,我不可忍住的三思一下神灵大约词,向校长翻阅。,差距很大,多巨万的压力啊!。。。

弃坑

 3.HODJ 3501

数心不在焉n而责备互质。

睬:本人不克不及用n%i==0来断定互质。,拿 … 来说,6,4,断定互质的办法是GCD。

n的搜索是32位概数搜索。

预感心理: 掌握心不在焉n且与n为非互质数和=掌握心不在焉n数的和-掌握心不在焉n且与n互堆的数的和

        1.欧拉函数可求与N互质的数的数字
 2.

if GCD(n),i)=1 then GCD(n),n-1)=1 (1<=i<=n)
免得m和n已知为互堆,N-M也n次互质。量
 

这么地,鉴于任性i和n互堆,决定n-Ⅰ和n是互质的。量,因而φ(n)不可忍住的是偶数(除2)

因而互质数从1到n是φ(n)*n/2(一到)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注