מנה מושלמת לחלוקה - התייעצות על יעילות הבדיקות

** זהירות ספוילר למי שעוד לא עשה את התרגיל

היי חברים,

אשמח להתייעצות על יעילות הקוד כך שיגיע מהר יותר לתוצאות.
בניתי פונקציה ראשונה שמריצה מספרים עד אינסוף וכל מספר היא שולחת לפונקציה שנייה שמחזירה TRUE אם המספר עונה על הדרישות של מנה מושלמת.
הפונקציה השנייה שולחת כל מספר כזה לפונקציה שמחזירה את כל המספרים שמתחלקים ללא שארית. לאחר מכן, היא מכניסה אותם לרשימה, סוכמת אותם ובודקת אם הסכום שווה למספר.

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

כדי להפוך את הקוד ליותר יעיל צריך לחשוב קצת על המתמטיקה שמאחורי מספר מושלם.
במידה ותמצא את הטריק המתמטי, להשמיש אותו בקוד יהיה לגמרי בהישג יד עבורך בשלב זה בקורס.
אזרוק לך כמה כיוונים לא לגמרי קשורים בסדר קושי עולה:

  1. במידה ומספר מתחלק ב-2 ללא שארית, האם יש צורך לבדוק האם הוא מתחלק ב-4?
  2. איזה מספרים הם בוודאות לא מספרים מושלמים? האם יש דרך לשחק איתם קצת?
  3. תריץ את התוכנית שלך עד לאיזשהו מספר יחסית גבוהה ותסתכל על כל המספרים שיצאו לך. האם יש מכנה משותף ביניהם שכל ילד ביסודי יוכל להבחין בו?

עריכה: עוד דבר, בתכנות זאת לא בושה לחפש באינטרנט :slight_smile: אפשר להתחיל אפילו מהגרסא העברית של ויקיפדיה

4 לייקים