歐拉函數小結

遇到了一個歐拉函數的題,於是就四處搜刮資料,拼湊出這個博客。


1.函數內容

定義:在數論,對正整數n,歐拉函數是小於或等於n的數中與n互質的數的個數,記爲φ(n)\varphi(n)。特別的,φ(1)=1\varphi(1)=1

通式φ(n)=ni=1k(11pi),p1,p2,...,pkn\varphi(n)=n\prod_{i=1}^k(1-\frac1{p_i})\quad,p_1,p_2,...,p_k是n的所有質因數

2.編程實現

①求φ(x)\varphi(x)

int euler(int n)
{
    int t=n, sn=sqrt(n+1);
    for(int i=2; i<=sn; ++i)
    {
        if(n%i==0)
        {
            t=t/i*(i-1);
            while(n%i==0) n/=i;
        }
        if(n==1) break;
    }
    if(n>1) t=t/n*(n-1);
    return t;
}

②求φ(1)\varphi(1)~φ(n)\varphi(n)

void euler(int n)
{
    e[1]=1;
    for(int i=2; i<=n; ++i)
    {
        if(!e[i])///i is a prime
        {
            for(int j=i; j<=n; j+=i)
            {
                if(!e[j]) e[j]=j;
                e[j]=e[j]/i*(i-1);
            }
        }
    }
    return;
}

③線性求1~n的所有素數和φ(1)\varphi(1)~φ(n)\varphi(n)
下面用到的一些公式會在“相關性質”中說明。

void Euler(int n)
{
    notprime[1]=true;
    e[1]=1;

    for(int i=2; i<=n; ++i)
    {
        if(!notprime[i])
        {
            prime[pn++]=i;
            e[i]=i-1;
        }
        for(int j=0; j<pn&&prime[j]*1ll*i<=n; ++j)
        {
            notprime[prime[j]*i]=true;
            if(i%prime[j]==0)
            {
                e[prime[j]*i]=e[i]*prime[j];
                break;
            }else
            {
                e[prime[j]*i]=e[i]*(prime[j]-1);
            }
        }
    }
    return;
}

以上代碼可用百度百科“歐拉函數”詞條中的歐拉函數表驗證。

3.相關性質

  • mnφ(m×n)=φ(m)×φ(n)m、n互質\to \varphi(m \times n)=\varphi(m)\times \varphi(n)
  • imodp=0φ(i×p)=φ(i)×pi \quad mod \quad p=0\to\varphi(i \times p)=\varphi(i) \times p
  • imodp=0ipmodp!=0pφ(i)=φ(ip)×(p1)i \quad mod \quad p=0 且 \frac ip \quad mod \quad p!=0且 p爲質數 \to \varphi(i)=\varphi(\frac ip) \times (p-1)
  • 歐拉定理:xpxφ(p)=1(modp)x與p互質\to x^{\varphi(p)}=1(mod \quad p)
    費馬小定理:pxp2=1(modp)p爲質數 \to x^{p-2}=1(mod\quad p)
  • nφ(n×2)=φ(n)×2n爲奇數\to \varphi(n \times 2)=\varphi(n)\times 2
  • 小於p且與p互質的數之和爲φ(p)p2\frac{\varphi(p)*p}2,因爲若x與p互質,則p-x也與p互質

2020.1.31


資料來源:
[1]百度百科“歐拉函數”
[2]數論基礎——歐拉函數.csdn博客

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