歐拉函數:
- 歐拉函數定義:
?1~n中與n互質的數的個數。 比如?
? ??
- 歐拉函數是積性函數:(也就是)當 n與m互質的時候:?
- 由算術基本定理,我們可以設n=
,那么我們只要計算出
的取值就能求出
的取值。 下面給出證明
的取值怎么求? 也就是求1~
中與
互質的數的個數
我們可以求與
不互質的數的個數,由于p是質數,所以與
不互質的數一定是p的倍數
那么1~
中,p的倍數就是?
, 那么我們就知道與
不互質的數的個數 就是
。也就是?
由于
之間互質,且歐拉函數是一個積性函數,那么有
所以我們只需要求出n的所有質因子p,然后求出 ?的乘積即可?
phi = n;
for(int i=2 ; i*i<=n ; i++ )if( n%i == 0 ){phi = phi/i * (i-1 ) // 1- 1/p == (p-1)/p 為了防止爆int,故意不寫成phi*(i-1)/iwhile ( n%i==0 ) n/=i ;}
if(n!=1) phi =phi/n *(n-1); //防止n有一個大于 sqrt(n)的質因子的情況
以上就是歐拉函數的板子,請牢牢記住,后面回經常用到。