2 תשובות
שואל השאלה:
c# דרך
אגב
c# דרך
אגב
אנונימי
א - קל לראות שisprime מאותחל בתוך הלולאה, נקודה למחשבה - מה קורה כאשר הלולאה בכלל לא תעבוד? מה ערך ההחזרה של הפונקציה?
פתרון אפשרי, הוצאת ההשמה מחוץ ללולאה.
ב- נשים לב שעבור i=1 (בלולאה), כל קלט מקבל מודולו אפס, לכן נאתחל את i מ-2 בלולאה.
ג- אין צורך לבדוק מספרים גדולים יותר, כי למשל אם ניקח את 20 - נניח והוא לא היה מתחלק ב-10, אז כמובן שהוא לא היה מתחלק גם ב11, כי נניח והוא כן היה מתחלק ב11, אז יש t *שלם* כך ש-t*11=20, אבל אז t=20/11 וt לא שלם. לא מצפים ממכם בטח לפרט ברמה כזו, אלא להגיד משפט כמו "אם זה לא מתחלק עד החצי, אז כמובן שמספרים גדולים יותר לא יחלקו אותו". (מה שכתבתי גם לא נחשב להוכחה מלאה, כי בחרתי מקרה ספציפי).
ד - נשים לב שעבור 1 אנחנו למעשה לא נרוץ בלולאה כלל, (כי i שמאותחל ל2 לא יותר קטן או שווה לאפס) ולכן זה בעייתי. לכן, תיקון אפשרי ופשוט זה להוסיף תנאי בתחילת הפונקציה, שאם num=1 אז להחזיר false. בנוסף, תיקון אפשרי אחר יכול להיות שבמקום לאתחל isprime, פשוט בלולאה נחזיר false, ובסוף הפונקציה נחזיר true (אם הוא הגיע עד לשם).
ה- פשוט לכתוב פונקציה שתעבור בלולאה כמות פעמים כמו המספר שנקבל, ובכל איטרציה נשלח ל-isprime לקבל תשובה מתאימה, וכמובן נחזיק counter.
פתרון אפשרי, הוצאת ההשמה מחוץ ללולאה.
ב- נשים לב שעבור i=1 (בלולאה), כל קלט מקבל מודולו אפס, לכן נאתחל את i מ-2 בלולאה.
ג- אין צורך לבדוק מספרים גדולים יותר, כי למשל אם ניקח את 20 - נניח והוא לא היה מתחלק ב-10, אז כמובן שהוא לא היה מתחלק גם ב11, כי נניח והוא כן היה מתחלק ב11, אז יש t *שלם* כך ש-t*11=20, אבל אז t=20/11 וt לא שלם. לא מצפים ממכם בטח לפרט ברמה כזו, אלא להגיד משפט כמו "אם זה לא מתחלק עד החצי, אז כמובן שמספרים גדולים יותר לא יחלקו אותו". (מה שכתבתי גם לא נחשב להוכחה מלאה, כי בחרתי מקרה ספציפי).
ד - נשים לב שעבור 1 אנחנו למעשה לא נרוץ בלולאה כלל, (כי i שמאותחל ל2 לא יותר קטן או שווה לאפס) ולכן זה בעייתי. לכן, תיקון אפשרי ופשוט זה להוסיף תנאי בתחילת הפונקציה, שאם num=1 אז להחזיר false. בנוסף, תיקון אפשרי אחר יכול להיות שבמקום לאתחל isprime, פשוט בלולאה נחזיר false, ובסוף הפונקציה נחזיר true (אם הוא הגיע עד לשם).
ה- פשוט לכתוב פונקציה שתעבור בלולאה כמות פעמים כמו המספר שנקבל, ובכל איטרציה נשלח ל-isprime לקבל תשובה מתאימה, וכמובן נחזיק counter.
באותו הנושא: