51nod 1136 尤拉函式

2022-04-27 11:21:13 字數 2254 閱讀 9673

1136 尤拉函式

基準時間限制:1 秒 空間限制:131072 kb 分值: 0 難度:基礎題

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

input

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

輸出phi(n)。
input示例

8
output示例

4
尤拉函式簡介:

尤拉函式只是工具:提供1到n中與n互質的數

尤拉函式在oi中是個非常重要的東西,不知道的話會吃大虧的.

尤拉函式用希臘字母φ表示,φ(n)表示n的尤拉函式.

對φ(n)的值,我們可以通俗地理解為小於n且與n互質的數的個數(包含1).

尤拉函式的一些性質:

1.對於素數p, 

φ(p)=p-1,

對於對兩個素數p,q 

φ(pq)=pq-1

尤拉函式是積性函式,但不是完全積性函式.

證明:函式的積性即:若m,n互質,則φ(mn)=φ(m)φ(n).由「m,n互質」可知m,n無公因數,所以φ(m)φ(n)=m(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)·n(1-1/p1')(1-1/p2')(1-1/p3')…(1-1/pn'),其中p1,p2,p3...pn為m的質因數,p1',p2',p3'...pn'為n的質因數,而m,n無公因數,所以p1,p2,p3...pn,p1',p2',p3'...pn'互不相同,所以p1,p2,p3...pn,p1',p2',p3'...pn'均為mn的質因數且為mn質因數的全集,所以φ(mn)=mn(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)(1-1/p1')(1-1/p2')(1-1/p3')…(1-1/pn'),所以φ(mn)=φ(m)φ(n).

即φ(mn)=φ(n)*φ(m)只在(n,m)=1時成立.

2.對於乙個正整數n的素數冪分解n=p1^q1*p2^q2*...*pn^qn.

φ(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn).

3.除了n=2,φ(n)都是偶數.

4.設n為正整數,∑φ(d)=n (d|n).

根據性質2,我們可以在o(sqrt(n))的時間內求出乙個數的尤拉函式值.

如果我們要求1000000以內所有數的尤拉函式,怎麼辦.

上面的方法複雜度將高達o(n*sqrt(n)).

我們來看看線性篩法的程式:

#include using namespace std;

int euler(int n)

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

return res;

}int main()

{ int n;

cin>>n;

cout<

它在o(n)的時間內遍歷了所有的數,並且有很多的附加資訊,

那麼我們是不是能在篩素數的同時求出所有數的尤拉函式呢.

答案是可以.

φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1、p2…pk為n的所有素因子。

比如:φ(12)=12*(1-1/2)(1-1/3)=4。

利用這個就比較好求了,可以用類似求素數的篩法。

先篩出n以內的所有素數,再以素數篩每個數的φ值。

比如求10以內所有數的φ值:

設一陣列phi[11],賦初值phi[1]=1,phi[2]=2...phi[10]=10;

然後從2開始迴圈,把2的倍數的φ值*(1-1/2),則phi[2]=2*1/2=1,phi[4]=4*1/2=2,phi[6]=6*1/2=3....;

再是3,3的倍數的φ值*(1-1/3),則phi[3]=3*2/3=2,phi[6]=3*2/3=2,phi[9]=.....;

再5,再7...因為對每個素數都進行如此操作,因此任何乙個n都得到了φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk)的運算

覺得這個「篩」還是比較好用的,以前求數的所有因子之和也是用的它。

**如下:

篩法求尤拉函式(求1-n之間所有的尤拉函式值儲存到euler[i]中)

void init(){

euler[1]=1;

for(int i=2;i

51nod1136 尤拉函式

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler s totient function 函式 尤拉商數等。例如 8 4 phi 8 4 因為1,3,5,7均和8互質。input 輸入乙個數n。2 n 10 9 output 輸出phi n ...

51nod 1136 尤拉函式

對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler s totient function 函式 尤拉商數等。例如 8 4 phi 8 4 因為1,3,5,7均和8互質。input 輸入乙個數n。2 n 10 9 output 輸出phi n ...

51nod 1136 尤拉函式

1136 尤拉函式 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏 取消關注 對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler s totient function 函式 尤拉商數等。例如 8 4 phi ...