關於尤拉函式Phi BZOJ2190

2021-08-18 20:35:03 字數 2215 閱讀 3292

尤拉函式(φ)phi是oi中很重要的一塊知識點,經常出現在各種數論題目裡,所以這裡就講一下phi的求法以及最簡單的應用。

φ(n)的含義是在1~n中與n互質的數的個數。那麼這裡有乙個十分明顯的結論,就是如果x為質數,則φ(x)=x-1,因為1~x-1都與x互質,都不是x的因數。下面我將介紹更多的關於phi的結論。

結論1:若x為質數,φ(x)=x-1(如上文)

結論2:若p為質數,k>1,則φ(p^k)=p^k-p^(k-1)=(p^k)*(1-1/p)。這個結論也十分容易證明,因為如果這個數為p^k,則與它不互質的數隻必須有因數p,而包含p的是1×p,2×p……(p^(k-1))×p共p^(k-1)個。

結論3:phi是積性函式,所以若x和y互質,則φ(x*y)=φ(x)*φ(y)

結論4:(由結論2擴充套件可知),對於任意大於1的數,將其分解質因數得x=∏pi^ki。所以φ(x)=x*∏(1-1/pi)。

我們利用結論3,就可以進行線性篩尤拉函式,我們在進行尤拉篩的時候順便進行尤拉函式的篩選,我們先看最普通的尤拉篩**。

pri[0]=pri[1]=1;pri[2]=0;

for(int i=2;i<=n;i++)

if(i%b[j]==0)}}

我們發現(i%b[j])的情況也就是i和b[j]互質的情況,所以這時直接phi[i*b[j]]=phi[i]*phi[b[j]]即可。

那麼對於(i%b[j]==0)的情況呢?這時phi[i*b[j]]=phi[i]*b[j],這裡證明就不展開了

pri[0]=1;pri[1]=1;pri[2]=0;phi[1]=1;

for(int i=2;i<=n;i++)

for(int j=1;j<=top;j++)}}

這一段就是求phi的過程,可知我們就是在尤拉篩的過程中加上了求phi的語句。

有些時候不需要線性求phi,則我們直接用結論4即可。

#include

#define maxn 40006

using namespace std;

intread()

int n,m,b[maxn],pri[maxn],phi[maxn],top;

int main()

for(int j=1;j<=top;j++)}}

for(int i=1;i<=m;i++)

return

0;}

一道簡單的求phi題,bzoj2190

description

作為體育委員,c君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的n * n的方陣,為了保證隊伍在行進中整齊劃一,c君會跟在儀仗隊的左後方,根據其視線所及的學生人數來判斷隊伍是否整齊(如下圖)。

現在,c君希望你告訴他隊伍整齊時能看到的學生人數。

input

共乙個數n。

output

共乙個數,即c君應看到的學生人數。

sample input

4 sample output

9 hint

【資料規模和約定】  對於 100% 的資料,1 ≤ n ≤ 40000

這題很明顯,我們先去掉最左邊的一行和最下面的一行,將答案加2,然後剩下的點(其橫縱座標均-1),如果其x和y互質,則這個點時可以被看到的,因為很明顯若x=bq,y=bp(b>1),則(q,p)會擋住(x,y)。所以我們直接累加phi值即可。

#include

#define ll long long

#define maxn 40006

using namespace std;

ll read()

ll n,m,b[maxn],pri[maxn],phi[maxn],top,ans;

int main()

pri[0]=1;pri[1]=1;pri[2]=0;phi[1]=1;

for(ll i=2;i<=n;i++)

for(ll j=1;j<=top;j++)}}

ans=2;

for(ll i=1;i<=n-1;i++) ans+=phi[i]*2;

printf("%lld",ans-1);

return

0;}

關於尤拉函式

原來是有一篇文的 但是latex渲染壓力夠大了不想加東西了 乾脆開個新坑 剛好之前xoi2003最後一題出了個被出爛的idea 算是提醒一下自己別再弄板子題了吧 說句閒話,碼農教程司馬 前置知識 擴充套件尤拉定理 b p 時 ab abmo d p p m odp b ge varphi p 時,a...

2016 12 7 關於尤拉函式

關於什麼是尤拉函式,以及一些非常簡單的尤拉函式,在此就不多加贅述。尤拉函式的基本性質 1.尤拉函式是積性函式,但不是完全積性函式,即 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 3...

尤拉函式 尤拉定理

尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...