מבחן AKS לראשוניות

מתוך testwiki
גרסה מ־14:45, 18 במאי 2023 מאת imported>Euro know
(הבדל) → הגרסה הקודמת | הגרסה האחרונה (הבדל) | הגרסה הבאה ← (הבדל)
קפיצה לניווט קפיצה לחיפוש

מבחן AKS לראשוניות הוא אלגוריתם דטרמיניסטי להוכחת ראשוניות שנוצר ופורסם על ידי מנינדרה אגרוול, ניראג' קיאל, וניטין סקסנה מהמכון ההודי לטכנולוגיה קנפור, ונקרא על שמם. האלגוריתם התפרסם ב-6 באוגוסט 2002, במאמרם "PRIMES is in P".תבנית:הערה החוקרים קיבלו שבחים רבים על עבודתם, כולל פרס גדל לשנת 2006 ופרס פולקרסון לשנת 2006. האלגוריתם קובע האם מספר הוא ראשוני או פריק בזמן ריצה פולילוגריתמי.

זמן הריצה של האלגוריתם המקורי הוא O(log12(n)) כאשר בהמשך הצליחו לשפרו לO(log6(n)).תבנית:הערה

רקע מתמטי

אלגוריתם AKS מבוסס על המשפט המתמטי הבא: בהינתן מספר שלם n, גדול מ-2, ומספר שלם a, זר ל-n, המספר n הוא ראשוני אם ורק אם מתקיימת הקונגרואנציה (הפולינומית) הבאה: (xa)n(xna)(modn) . המשפט הוא הכללה לפולינומים של המשפט הקטן של פרמה, וניתן להוכיח אותו בעזרת הבינום של ניוטון עם התכונה של מקדם בינומי: (nk)0(modn) לכל k הקטן מ-n, אם ורק אם n הוא ראשוני.

האלגוריתם

האלגוריתם הוא כדלקמן:

  1. קלט: מספר טבעי n > 1.
  2. אם n = ab למספרים שלמים a,b > 1, המספר פריק.
  3. מצא r הקטן ביותר כך ש-Or(n)>(log2n)2 כאשר Or(n) הוא הסדר הכפלי של n מודולו r, כלומר: זהו המספר הטבעי הקטן ביותר k כך ש-nk1(modr).
  4. אם 1<gcd(a,n)<n עבור איזשהו a ≤ r, המספר פריק.
  5. בצע מ- a = 1 עד ל-φ(r)log(n) (כאן φ היא פונקציית אוילר)
    1. אם לא קיימים פולינומים f ו-g כך ש-(X+a)n(Xn+a)=nf(x)+(xr1)g(x) עבור a (כלומר: (X+a)n≢(Xn+a)(mod(n,xr1))), המספר פריק.
  6. המספר ראשוני.

קישורים חיצוניים

הערות שוליים

תבנית:הערות שוליים