尤拉函式 POJ 2478 尤拉篩法

2022-05-12 00:48:12 字數 1172 閱讀 2131

通式: $\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...