通式: $\phi(x)=x(1-\frac)(1-\frac)(1-\frac) \cdots (1-\frac)$
若n是質數p的k次冪:$\phi(n)=p^k-p^=(p-1)p^$,因為除了p的倍數外,其他數都跟n互質。
設n為正整數,以$\phi(n)$表示不超過n且與n互素的正整數的個數,稱為n的尤拉函式值,這裡函式φ:n→n,n→φ(n)稱為尤拉函式。
尤拉函式是積性函式——若m,n互質, $\phi(mn)=\phi(m)\phi(n)$
特殊性質:當n為奇數時, $\phi(2n)=\phi(n)$, 證明與上述類似。
若n為質數則 $\phi(n)=n-1$
zky學長上課時留的思考題,關於$n = \sum_ \phi(d)$的證明:
①當$n$為質數時,顯而易見$n= \sum_ \phi(d)= \phi(1) + \phi(n) = n$
②當$n=p^a$時
\[ \begin n & = \sum_ \phi(d) \\ & = \sum_^a \phi(p^i) \\ & = \phi(1) + \phi(p^1) + \phi(p^2) + \cdots + \phi(p^a) \\ & = 1 + p^1-p^0+p^2-p^1+ \cdots +p^a-p^ \\ = p^a = n \end \]
③當$n$為其他情況時,將$n$分解質因數得$n=p_^}p_^} \cdots p_^}$,對於每個$p_^}$是互質的,那麼由積性函式的性質($n$和$m$互質,則$\phi(nm)=\phi(n)\phi(m)$)和②中的證明可以得出結論,是不是很簡單啊
單個尤拉函式求法:
int euler_phi(int n)if (n>1) ans=ans/n*(n-1);
}
int phi[maxn];void phi_table(int n)
}
poj 2478 o(n)內篩法:
#includeusing namespace std;
const int n=1000003;
int num=0,prime[n],phi[n];
bool notp[n];
inline void shai(){
phi[1]=1;
for(int i=2;i這樣就可以啦
poj 2478 線性篩素數 尤拉函式
由於2 n 10 6,所以一般的求尤拉函式方法用不上,而我們可以根據他的乙個性質 設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 進行求解,而現在首要的任務就是求質因數a,我們可以利用線性篩素數時產生的n...
poj 2478(快速求解尤拉函式優化版。。。)
之前一直在用 void get eular memset eul,0,sizeof eul eul 1 1 for int i 2 i 然後按照優化方案來寫程式。進入了100ms以內了。嗨皮。include include includeusing namespace std const int m...
線性方法求尤拉數 POJ2478
1.當需要求1到n的尤拉數之和時用線性方法 本題 2.當需要求單個尤拉數但資料很大用標準方法求 例如 線性的方法求尤拉數 模板 include include define ll long long const int maxn 1000010 int dp maxn ll a maxn int m...