אלגוריתם מילר-רבין

מילר-רבין בודק אם מספר הוא ראשוני. מספר ראשוני מחלקים אותו רק בעצמם וב-1. האלגוריתם מהיר ולעיתים קטן יכול לטעות.

קודם כותבים את n-1 בצורה n-1 = 2^s · r. זאת אומרת: מחלקים ב-2 עד שהשארית r אי-זוגית. (r הוא המספר שנותר.)
בוחרים מספר a שלא מתחלק ב-n. מחשבים חזקות של a ומסתכלים על השארית בחלוקה ב-n.
אם התוצאה היא שארית 1, או אם על ידי חיבור ריבועים של התוצאה מקבלים שארית n-1, אז a "מעיד" שייתכן ש-n ראשוני.
אם זה לא קורה, אומרים ש-n פריק (לא ראשוני).
חוזרים על הבדיקה כמה פעמים כדי להקטין את הסיכוי לטעות.

יש תוכנית פייתון קצרה שמממשת את השלבים: מפצלים את n-1, בוחרים a אקראי, מחשבים שאריות ומרבעים עד שמחליטים.

נבדוק n = 781. יש כאן n-1 = 2^2 · 195.
עם a=5 מקבלים שארית 1, לכן 5 מעיד לטובת ראשוניות.
עם a=17 מקבלים שארית שלילית (שזה n-1), גם זה מעיד לטובת ראשוניות.
עם a=2 מקבלים שארית אחרת, וזה מראה ש-781 פריק. בפועל 781 = 11 · 71.

תגובות גולשים

התגובה תפורסם באתר לאחר אישור המערכת

עדיין אין תגובות. היה הראשון להגיב!