尤拉函式證明:
小於等於n的基數有n個,討論所有n的素因子,只要是素因子的倍數的是都不是n的互質數。
首先如果如果n為素數那麼,φ(n)=n-1;
如果n不是素數,只要除去n的質因子和n的質因子的倍數就可以了,①因為任意乙個數都能表示成若干個素數的乘積,所以只要除去質因子的以及倍數就夠可以了,因為如果出去的不是質因子,那麼這個因子還能繼續被分解成若干個質因子的乘積又能被n整除,綜上那麼就有基數n減去所有是質因子倍數的個數,然後加上任意兩個,減三個,加四個…質因子積的倍數(容斥定理),②φ(n)=n-n/p1-n/p2-n/p3-n/p4….-n/pn+n/(p1*p2)+n/(p1*p3)…(容斥定理),所以②式得出的就是所有的互質數的個數。可化簡為φ(n)=n*(1-1/p1) *(1-1/p2) *(1-1/p3)…*(1-1/pk);
①式證明:當n=2時,顯然成立;
假設當n=k時成立;
那麼當n=k+1時,如果n是素數那麼顯然成立,如果不是素數那麼n一定能分解成兩個數的乘積,又因為n=k時是成立的,所有綜上所述結論成立
另外尤拉函式還有兩條重要的性質,可以快速求出尤拉函式的值(a為n的質因素)
若( n%a ==0&&(n/a)%a ==0)則有:e(n)= e(n/a)*a;
若( n%a ==0&&(n/a)%a !=0)則有:e(n)= e(n/a)*(a-1);
尤拉函式**:
int eular(int n)
} if (n > 1)
ans -= ans / n;
return ans;
}
另乙個版本:
#include#include#include#includeusing namespace std;
int oula(int x)
}} //x為合數時
if(x>1)
res*=x-1;
return res;
}int main()
尤拉函式 尤拉定理
尤拉函式 對正整數 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 ...
尤拉函式尤拉篩
尤拉函式求小於等於n與n互質的數的個數 複習時發現這個知識點竟然沒有整理 n為素數即為n 1 除了其本身 n為素數的倍數 ola sushu j i ola i sushu j else ola sushu j i ola i sushu j 1 include include include in...