עכשיו נפנה את תשומת לבנו לבעיית פירוק גורמים שלמים, ונראה כיצד ניתן לפתור אותה ביעילות במחשב קוונטי באמצעות אומדן פאזה.
האלגוריתם שנקבל הוא אלגוריתם שור לפירוק גורמים שלמים.
שור לא תיאר את האלגוריתם שלו במפורש במונחים של אומדן פאזה, אך זוהי דרך טבעית ואינטואיטיבית להסביר כיצד הוא עובד.
נתחיל בדיון על בעיית ביניים המכונה בעיית מציאת הסדר ונראה כיצד אומדן פאזה מספק פתרון לבעיה זו.
לאחר מכן נראה כיצד פתרון יעיל לבעיית מציאת הסדר מעניק לנו פתרון יעיל לבעיית פירוק גורמים שלמים.
(כאשר פתרון לבעיה אחת מספק פתרון לבעיה אחרת כך, אנו אומרים שהבעיה השנייה מצטמצמת לראשונה — כלומר במקרה זה אנחנו מצמצמים פירוק גורמים שלמים למציאת סדר.)
החלק השני הזה של אלגוריתם שור אינו משתמש כלל בחישוב קוונטי; הוא קלאסי לחלוטין.
חישוב קוונטי נחוץ רק לפתרון מציאת הסדר.
בעיית מציאת הסדר
קצת תורת מספרים בסיסית
כדי להסביר את בעיית מציאת הסדר וכיצד ניתן לפתור אותה באמצעות אומדן פאזה, יהיה מועיל להתחיל עם כמה מושגים בסיסיים בתורת מספרים ולהציג בדרך גם סימונים שימושיים.
להתחלה, לכל מספר שלם חיובי נתון N, נגדיר את הקבוצה ZN כך:
ZN={0,1,…,N−1}
לדוגמה,
Z1={0},
Z2={0,1},
Z3={0,1,2},
וכן הלאה.
אלו הן קבוצות של מספרים, אך אפשר לחשוב עליהן כיותר מסתם קבוצות.
בפרט, אפשר לחשוב על פעולות חשבוניות על ZN כגון חיבור וכפל — ואם נסכים תמיד לקחת את התוצאות מודולו N
(כלומר, לחלק ב-N ולקחת את השארית כתוצאה), תמיד נישאר בתוך הקבוצה הזו כשנבצע פעולות אלו.
שתי הפ עולות הספציפיות של חיבור וכפל, שתיהן מודולו N, הופכות את ZN לחוג, שהוא סוג אובייקט חשוב ביסודו באלגברה.
לדוגמה, 3 ו-5 הם איברים של Z7, ואם נכפיל אותם יחד נקבל 3⋅5=15, שמשאיר שארית 1 בחלוקה ב-7.
לפעמים אנו מביעים זאת כך:
3⋅5≡1(mod 7)
אבל אפשר גם פשוט לכתוב 3⋅5=1, בתנאי שהובהר שאנחנו עובדים ב-Z7, כדי לשמור על הסימונים פשוטים ככל האפשר.
לדוגמה, הנה לוחות החיבור והכפל עבור Z6.
+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321
מבין N האיברים של ZN, האיברים a∈ZN המקיימים gcd(a,N)=1 הם מיוחדים.
לעתים קרובות הקבוצה המכילה איברים אלו מסומנת בכוכבית כך:
ZN∗={a∈ZN:gcd(a,N)=1}
אם נתמקד בפעולת הכפל, הקבוצה ZN∗ יוצרת חבורה — ספציפית חבורה אבלית — שהיא גם כן סוג אובייקט חשוב באלגברה.
עובדה בסיסית על קבוצות אלו (ועל חבורות סופיות בכלל) היא שאם נבחר איבר כלשהו a∈ZN∗ ונכפיל את a בעצמו שוב ושוב, תמיד נגיע בסוף למספר 1.
כדוגמה ראשונה, ניקח N=6.
5∈Z6∗ מכיוון ש-gcd(5,6)=1, ואם נכפיל 5 בעצמו נקבל 1,
כפי שהלוח שלמעלה מאשר.
52=1(working within Z6)
כדוגמה שנייה, ניקח N=21.
אם נעבור על המספרים מ-0 עד 20, אלו שיש להם מחלק משותף גדול ביותר שווה ל-1 עם 21 הם:
Z21∗={1,2,4,5,8,10,11,13,16,17,19,20}
לכל אחד מהאיברים האלה, ניתן להעלות את המספר לחזקה של מספר שלם חיובי ולקבל 1.
הנה החזקות הקטנות ביותר שעבורן זה עובד:
11=126=143=156=182=1106=1116=1132=1163=1176=1196=1202=1
כמובן שאנחנו עובדי ם בתוך Z21 בכל המשוואות האלה, דבר שלא טרחנו לכתוב — אנחנו רואים זאת כמשתמע כדי לא להעמיס. נמשיך לעשות כך לאורך שאר השיעור.
הצהרת הבעיה וקשר לאומדן פאזה
עכשיו נוכל להציג את בעיית מציאת הסדר.
מציאת סדר
קלט: מספרים שלמים חיוביים N ו-a המקיימים gcd(N,a)=1
פלט: המספר השלם החיובי הקטן ביותר r כך ש-ar≡1 (mod N)
לחלופין, במונחי הסימון שהצגנו לעיל, ניתן לנו a∈ZN∗, ואנחנו מחפשים את המספר השלם החיובי הקטן ביותר r כך ש-ar=1.
מספר זה r נקרא הסדר של a מודולו N.
כדי לקשור את בעיית מציאת הסדר לאומדן פאזה, בואו נחשוב על הפעולה המוגדרת על מערכת שהמצבים הקלאסיים שלה מתאימים ל-ZN, שבה אנחנו כופלים באיבר קבוע a∈ZN∗.
Ma∣x⟩=∣ax⟩(for each x∈ZN)
להיות מדויק, אנחנו מבצעים את הכפל ב-ZN, כך שמשתמע שאנחנו לוקחים את המכפלה מודולו N בתוך ה-ket בצד ימין של המשוואה.
לדוגמה, אם ניקח N=15 ו-a=2, אז הפעולה של M2 על הבסיס הסטנדרטי {∣0⟩,…,∣14⟩} היא כדלקמן:
M2∣0⟩=∣0⟩M2∣1⟩=∣2⟩M2∣2⟩=∣4⟩M2∣3⟩=∣6⟩M2∣4⟩=∣8⟩M2∣5⟩=∣10⟩M2∣6⟩=∣12⟩M2∣7⟩=∣14⟩M2∣8⟩=∣1⟩M2∣9⟩=∣3⟩M2∣10⟩=∣5⟩M2∣11⟩=∣7⟩M2∣12⟩=∣9⟩M2∣13⟩=∣11⟩M2∣14⟩=∣13