日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数论——欧拉函数

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数论——欧拉函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義

小于n的正整數中與n互質的數的數目(φ(1)=1)

通式

證明:

  設p是N的質因子,1~N中p的倍數有p,2p,3p,…,(N/p)*p,共N/p個。

  同理,若q也是N的質因子,則1~N中q的倍數有N/q個。

  根據容斥原理,1~N中除去q的倍數與p的倍數后,數的個數為N - N/p - N/q + N/(pq) = N(1 - 1/p)(1 - 1/q)。

  而要求1~N中與N互質的數的個數,只需將N的所有質因子的倍數全部除去即可。

  利用容斥原理,因式分解后即可得到上式。

性質

(以下只列舉我們需要用到的一些性質)

我們用phi(N)表示歐拉函數。

  • 當N為質數時,顯然phi(N)=N-1。
  • 2.根據算數基本定理,N=p1C1*p2C2*…*pkCk?。設N的最小質因子為p,當p的指數為1時,phi(N)=(p-1)*phi(N/p)。
  • 3. 當p的指數不為1時,同2可證得phi(N)=p*phi(N/p)。

2的證明:

  根據歐拉函數通式,

  phi(N)=N*(p1-1)/p1*(p2-1)/p2*…*(pk-1)/pk,

  phi(N/p1)=N/p1*(p2-1)/p2*…*(pk-1)/pk,

  其中p1即為N的最小質因子,比較兩式即可得證。

直接法

模板題鏈接:歐拉函數

代碼實現:

int Euler(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; }

線性篩法

根據前面的歐拉線性篩質數的算法(可參考本人博客:數論——質數篩法),由于它在篩選的同時也求出了每個數的最小質因子,故而在其基礎上求出歐拉函數即可。

模板題鏈接:篩法求歐拉函數

代碼如下:

typedef long long ll; const int N = 1000010;int n; int prime[N],cnt,v[N]; int phi[N];ll Euler_prime(int n) {phi[1]=1;for(int i=2;i<=n;i++){if(!v[i]){prime[++cnt]=i;phi[i]=i-1;}for(int j=1;prime[j]<=n/i;j++){int p=prime[j];v[p*i]=1;if(i%prime[j]==0){phi[i*p]=p*phi[i];break;}phi[i*p]=(p-1)*phi[i];}}ll res=0;for(int i=1;i<=n;i++)res+=phi[i];return res; }

?

轉載于:https://www.cnblogs.com/ninedream/p/11212793.html

總結

以上是生活随笔為你收集整理的数论——欧拉函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。