Эйлер функциясы

testwiki жобасынан
Навигацияға өту Іздеуге өту
Алғашқы мың мәніφ(n)

Эйлера функциясы φ(n), мұндағы nнатурал сан, n санынан үлкен емес әрі онымен өзара жай натурал сандар санына тең. Эйлера бұл функцияны сандар теориясы еңбектерінде алғашқы болып пайдаланғандықтан соның құрметіне осылай талып кетті.

Анықтама

pi: жай сандарға келесідей жіктелген n натурал саны берілсін:

n=i=1kpiαi

Онда

φ(n)=i=1kpiαi1(pi1)

функциясы Эйлер функциясы деп аталады. Мұндағы

φ(1)=1.

болады деп саналады. Эйлера функциясын Эйлер көбейтіндісі ретінде де өрнектеуге болады:

φ(n)=npn(11p),

мұндағы pn санының жай сандарға жіктелуінде қатысатын барлық жай сандарды қабылдайды.

Функцияның кейбір мәндері

φ(n) +0 +1 +2 +3 +4 +5 +6 +7 +8 +9
0+ 1 1 2 2 4 2 6 4 6
10+ 4 10 4 12 6 8 8 16 6 18
20+ 8 12 10 22 8 20 12 18 12 28
30+ 8 30 16 20 16 24 12 36 18 24
40+ 16 40 12 42 20 24 22 46 16 42
50+ 20 32 24 52 18 40 24 36 28 58
60+ 16 60 30 36 32 48 20 66 32 44
70+ 24 70 24 72 36 40 36 60 24 78
80+ 32 54 40 82 24 64 42 56 40 88
90+ 24 72 44 60 46 72 32 96 42 60

Қасиеттері

  1. φ(pn)=pn1(p1), егер p — жай сан болса. Жекеше түрі: n=1 болғанда φ(p)=p1;
  2. φ(mn)=φ(m)φ(n), егер m мен n өзара жай болса. Яғни Эйлер функциясы мультипликативті;
  3. aφ(m)1(modm), егер m мен a өзара жай болса. Бұл Эйлер теоремасы болып табылады;
  4. φ(mk)=mk1φ(m);
  5. mn=(m,n)[m,n],φ(m)φ(n)=φ((m,n))φ([m,n]),φ(mn)φ((m,n))=φ(m)φ(n)(m,n), если [m,n]Ең кіші ортақ еселік, aл (m,n)Ең үлкен ортақ бөлгіш.

Асимптоталық байланыстар

  1. Cnlnlnnφ(n)n, мұндағы C — белгілі бір тұрақты;
  2. nxφ(n)=3π2x2+O(xlnx);
  3. k=1nkφ(k)=O(n);
  4. k=1n1φ(k)=O(lnn).

Аналитикалық байланыстар

  • φ(n)=dndμ(nd);
  • k=1nφ(k)=12(1+k=1nμ(k)nk2);
  • k=1nφ(k)k=k=1nμ(k)knk;
  • dnμ2(d)φ(d)=nφ(n).
мұндағы |q|<1.
  • 1kn(k,n)=1k=12nφ(n), мұндағы n>1.

Компьютерлік іске асырылуы

Си тілінде

Төмендегі функция φ(n)=i=1kpiαi1(pi1) көбейтіндісін есептейді. Бұл n санын жай сандарға көбейткіштерге 2-ден бастап барлық сандарға бөлу арқылы іске асырылады; егер n санға бөлінсе, бұл сан n санын өшіріледі, ал нәтиже-көбейтінді сәйкесінше сол санға көбейтіліп өседі.

int phi(int n)
{
  int ret = 1, p;
  for(p = 2; p * p <= n; p++)
  {
    if (n % p == 0)
    {
      n /= p;
      while(n % p == 0) 
      {
        n /= p;
        ret *= p;
      }
      ret *= p - 1;
    }
  }
  return n > 1 ? ret * (n - 1) : ret;
}
    Private Function phi(ByVal n As Integer) As Integer
        Dim ret As Integer = 1, p As Integer = 2
        For p = 2 To n / p
            If n Mod p = 0 Then
                n /= p
                While n Mod p = 0
                    n /= p
                    ret *= p
                End While
                ret *= p - 1
            End If
        Next
        Return If(n > 1, ret * (n - 1), ret)
    End Function
let phi n =
    let rec nod a b = if b = 0 then a
                      else nod b (a % b)
    { 1 .. n-1 }
    |> Seq.filter (fun i -> nod i n = 1)
    |> Seq.length


Үлгі:Math-stub