尤拉函式及其線性篩法 O n

2021-09-26 05:45:21 字數 834 閱讀 6140

尤拉函式:

定義phi (n) 為 1 到 n-1 範圍內的與n互素的數的個數;

公式:phi(n)= n*(1- 1/p1) * (1 - 1/p2) * (1 - 1/p3) 。。。。。。(1 - 1/pn);

pi為n的素因子;

性質:1。 n為1時, phi(1)==1;

2。 n為素數時, phi (n)==n-1;

3。 若m , n互質 phi(n * m) == phi(n) * phi(m);

4。 若m , n不互質且m為n的約數,m為質數 phi(n * m) == phi(n) * m;

5。 若n為素數 phi(n ^ k) == (n-1) * n ^ (k-1);

6。 n為奇數時 phi(2 * n) == phi(n);

7。 尤拉定理 a ^ phi(n) ==1 (mod n);

8。 若a與n互質 a ^ m (mod n) == a ^ (m % phi(n) ) (mod n);

尤拉函式線性篩:
void getphi()    

for(j=1;j<=tot;j++)

else

phi[i*prime[j]]=phi[i]*(prime[j]-1);//性質 3,2;

}

}

}

求單個phi(n):

ll phi(ll n)

} }if(n>1)

sum-=sum/n;

return sum;

}----------

尤拉函式線性篩法

首先我們知道尤拉函式是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...

線性篩法(尤拉篩法)

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

線性篩法(尤拉篩)

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