擴充套件尤拉函式

2021-07-08 18:38:23 字數 1296 閱讀 5261

尤拉函式

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。例如euler(8)=4,因為1,3,5,7均和8互質。

euler函式表達通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn為x的所有素因數,x是不為0的整數。euler(1)=1(唯一和1互質的數就是1本身)。 

尤拉公式的延伸:乙個數的所有質因子之和是euler(n)*n/2。

那麼如何變成實現尤拉函式呢?下面通過兩種不同的方法來實現。第一種方法是直接根據定義來實現,同時第一種方法也是第二種篩法的基礎,當好好理解。

求單個數的尤拉函式

題意:給你乙個數n,n很大(n<=100000000),但是題目中的測試資料不是很多,這樣的話直接用求單個尤拉函式值的方法求解,如果用下面第二種方法打個表的話是行不通的,因為n的值太大不適合開設陣列,所以這時應該直接求n的尤拉函式值。

//直接求解尤拉函式 

int euler(int n){ //返回euler(n)     

int res=n,a=n;     

for(int i=2;i*i<=a;i++){          

if(a%i==0){            

res=res/i*(i-1);//先進行除法是為了防止中間資料的溢位              

while(a%i==0) a/=i;        

if(a>1) res=res/a*(a-1);  

return res; 

//篩選法打尤拉函式表  

#define max 1000001 

int euler[max];  

void init(){     

euler[1]=1;   

for(int i=2;ieuler[i]=i;    

for(int i=2;iif(euler[i]==i)         

for(int j=i;jeuler[j]=euler[j]/i*(i-1);//先進行除法是為了防止中間資料的溢位   

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler's totient function、φ函式、尤拉商數等。例如:φ(8) = 4(phi(8) = 4),因為1,3,5,7均和8互質。

現在讓你求phi(phi(n))。

輸入乙個數n。(2 <= n <= 10^9)

輸出 phi(phi(n))。

尤拉函式,擴充套件尤拉降冪

尤拉函式 phi n 表示下於n且與n互質的整數的個數。模板 include include include define il inline define maxn 200100 include define ll long long using namespace std 這個函式是求1 n內小...

尤拉函式 尤拉定理

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

尤拉函式 尤拉定理

尤拉函式 設 n 為正整數,則 1,2,n 中與 n 互素的整數的個數計作 n 叫做尤拉函式。設 p 是素數,p p 1設 p 是素數,pa pa p a 1 設 p,q 是不同的素數,n q p,n p q 即 n p 1 q 1 設 m,n 是兩個正整數,且 m,n 1,若 n m n,n m ...