尤拉函式線性篩法

2022-05-11 01:49:18 字數 788 閱讀 6548

首先我們知道尤拉函式是1到n-1中與n互質的數的個數。

除此之外,我們還要知道一些性質:

當p是素數時

1.   phi(p)=p-1。(不多bb)

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

證明:令n == p^k,小於 n 的正整數共有 p^k-1 個,其中與 p 不互素的個數共 p^(k-1)-1 個,它們是 1*p,2*p,3*p ... (p^(k-1)-1)*p

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

3.   如果i%p==0,那麼phi(i*p)=p*phi(i);(自行理解)

4.   如果i%p!=0,那麼phi(i*p)=(p-1)*phi(i);

證明:因為尤拉函式是積性函式,所以有phi(i*p)=phi(i)*phi(p),然後p是素數,所以phi(i*p)=(p-1)*phi(i);

知道了上面的四個性質,相信大家就可以寫出線性篩法求尤拉函式的**了.

我用的是尤拉篩法的同時篩出尤拉數(啦啦啦):

int prime[1000045],cnt;

int phi[1000045];

bool vis[1000045];

il void shai()

for(int j=1;j<=cnt;j++)

else

phi[i*prime[j]]=(prime[j]-1)*phi[i];//xing zhi 4

}}}

線性篩法(尤拉篩法)

嗯在剛剛 沒錯就是在幾分鐘之前 我學會了線性篩法 實在是乙個很好的篩法 正常的篩法,都會對乙個數篩多次 但是尤拉篩法不會 尤拉篩法是用它的最大因數去篩 別跟我說最小質因數,那個很難讓人理解 雖然最小質因數和最大因數是一樣的 我們假設乙個數k,它是t的最大因數 容易知道t是不唯一的 那我們要乘以乙個質...

線性篩法(尤拉篩)

從前有乙個素數篩法叫埃拉託斯特尼篩法,它的思想很簡單,把1 n以內素數的整數倍的數字劃掉,留下的就全是素數,但是它的複雜度是o nlglgn 對於大量不友好資料會跪,於是線性曬登場了。include using namespace std int prime 1100000 primesize,ph...

尤拉函式的線性篩法

尤拉函式 對正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。尤拉函式又稱為 函式。下面是尤拉函式的一些性質 如果n為某乙個素數p,則 p 1 如果n為某乙個素數p的冪次p ap a pa,則 p ap a pa p 1 p a 1 p a 1 p a 1 如果n為任意兩個互質的數a,b的積,...