歐拉函數+歐拉定理

Visible Lattice Points

寫這篇博客是因爲上面那個題,人家是歐拉函數,看我這貪心一下午…

定義:歐拉函數是小於x的整數中與x互質的數的個數,一般用φ(x)表示。例如φ(6)=2.特殊的,φ(1)=1。
求法:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn爲x的所有質因數,x是不爲0的整數.
證明:容斥原理,詳細的過程略…懶得敲了
定義直接求代碼:

int Euler(int x)
{
    int ans = x;
    for(int j = 2;j<=x/j;j++)
    {
        if(x%j==0)
        {
            ans = ans/j*(j - 1);
            while(x%j==0)
                x/=j;
        }
    }
    if(x>1)ans = ans/x*(x - 1);
    return ans;
}

記憶數組+打表

int num[maxn];
void Euler(int a)
{
	num[1] = 1;
    for(int i = 2;i<=a;i++)
    {
        if(!num[i])
        {
            for(int j = i;j<=a;j+=i)
            {
                if(!num[j])
                	num[j] = j;
                num[j] = num[j]/i*(i-1);
            }
        }
    }
}

當求出歐拉函數時候,歐拉定理也就出來了。
歐拉定理 :
對於互質的正整數 a 和 n ,有 a^φ(n) ≡ 1 ( mod n ),如果n爲質數的話,那麼就成了費馬定理了,既:a^(p - 1) ≡ 1( mod p ) ,還有幾個的性質以及證明,附:大佬博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章