הפיתרון שלי. אל תסקלו אותי, בבקשה.
יש לי תחושה שעכשיו תמצאו בו פגמים...לא חשבתי שזו שאלה קשה. בכל מקרה, הרעיון הוא במקום למצוא את a ואז לחפש את b , למצוא את b ואז לחפש את a . איך מוצאים את b? ובכן, אי אפשר ממש למצוא אותו, אבל אפשר להניח מה הוא. נתון לנו ש a,b מספרים טבעיים אחרי הכל. אם n שווה לאחד אז האלגו' יחזיר מן הסתם a=1 ו b=2 ופתרנו את הבעיה. אם n לא שווה לאחד, אז מובן שגם a גדול מאחד. אם a גדול מאחד, בטוח שהמספר b קטן או שווה ל log n בבסיס 2 (כי 2 זהו הבסיס האפשרי הקטן ביותר). אז נעשה לולאה שרצה מ-1 עד logn(חישוב לוג עולה לוג) ובכל איטרציה מניחים שמס' האיטרציה זה ה-b הנכון. כעת, משיש לנו הנחה לגבי b , איך מוצאים את a ? חיפוש בינארי! נעשה חיפוש בינארי מ-2 עד n . כל פעם נבחר a אחר. את ההשוואה ושינוי Imax ו Imin נעשה אחרי שנעלה את a בחזקת b . העלאת a בחזקת b עולה לנו לוג בשלישית. אם המספר שיצא לנו, ה-a שיצא לנו בחזקת ה b שהנחנו קטן מ-n(השוואה גם עולה לנו לוג ) אז נגדיל את Imin . אם הוא גדול מ- n , נקטין את Imax. בסופו של דבר או שנמצא a שיהיה שווה לn בדיוק, או שנגיע למסקנה בחיפוש הבינארי שאין a כזה ונעבור בחינניות לb הבא. שום פרוצדורות מורכבות ושום הנחות, ובלי מספר ראשוני שיקוצי אחד! הדבר הזה עולה לנו משהו כמו log n בחזקת 4 בגלל הלולאה שכל פעם עושה העלאה בריבוע. (פלוס לוג להשוואות, פלוס לוג לשינוי האינדקסים,פלוס לוג לחיפוש הבינארי המאולתר)