線性求尤拉函式

2021-08-10 04:22:42 字數 1368 閱讀 9146

尤拉函式:在數論中,對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。

先給出乙個結論:

設p是素數,

若p是x的約數,則e(x*p)=e(x)*p.

若p不是x的約數,則e(x*p)=e(x)e(p)=e(x)(p-1).

證明如下:

e(x)表示比x小的且與x互質的正整數的個數。

*若p是素數,e(p)=p-1。

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

證:令n=p^k,小於n的正整數數共有n-1即(p^k-1)個,其中與p不質的數共[p^(k-1)-1]個(分別為1*p,2*p,3*p…p(p^(k-1)-1))。

所以e(p^k)=(p^k-1)-(p^(k-1)-1)=p^k-p^(k-1).得證。

*若ab互質,則e(a*b)=e(a)*e(b),尤拉函式是積性函式.

對任意數n都可以唯一分解成n=p1^a1*p2^a2*p3^a3…*pn^an(pi為素數).

則e(n)=e(p1^a1)e(p2^a2)*e(p3^a3)…*e(pn^an)

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

=(p1^a1*p2^a2*p3^a3*…pn^an)[(p1-1)(p2-1)(p3-1)…(pn-1)]/(p1*p2*p3*…*pn)

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

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

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

->當k>1時,e(p^k)=e(p*p^(k-1))=e(p^(k-1))*p.

(當k=1時,e(p)=p-1.)

由上式: 設p是素數,

若p是x的約數,則e(x*p)=e(x)*p.

若p不是x的約數,則e(x*p)=e(x)e(p)=e(x)(p-1). 證明結束。

**

void get_phi()///篩法求尤拉函式  

for(int j=0; jif(i*p[j] > maxn)

break;

flag[i*p[j]] = false;///素數的倍數,所以i*p[j]不是素數

if(i%p[j] == 0)///性質:i mod p == 0, 那麼 phi(i * p) == p * phi(i)

else

phi[i*p[j]] = (p[j]-1) * phi[i];///i mod p != 0, 那麼 phi(i * p) == phi(i) * (p-1)

} }

}

線性篩求尤拉函式

蒟蒻要開始打數論模板了。尤拉函式 小於n且與 n互素的數個數,記為 n 它有這樣幾個優越的性質 1.phi p p 1 因為素數p除了1以外的因子只有p,所以與 p 互素的個數是 p 1個 2.phi p k p k p k 1 p 1 p k 1 證明 令n p k,小於 n 的正整數共有 p k...

求尤拉函式

3.尤拉函式 對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目 顯然對素數n,phi n n 1 通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1互質的數就是1本身 很簡單,就不寫 ...

線性篩質數,線性求尤拉

本篇前半部分講線性篩質數,也叫尤拉篩,後半篇講解線性求尤拉函式。我們有一種篩質數的辦法,就是列舉每個質數,然後把這個質數的倍數都篩掉,這個做法比較簡單,在這裡不做過多介紹。尤拉篩就是在這個方法的基礎上,使得每個合數只會被它最小的那個質因子篩掉,保證了複雜度是線性的 memset isprime,1,...