אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, אביב 2019 תרגיל בית מספר - 2 להגשה עד 02/04/2019 בשעה 23:55 קיראו בעיון את הנחיות הע

מסמכים קשורים
תרגיל בית מספר 1#

תרגיל בית מספר 1#

פייתון

מבוא למדעי המחשב

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

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

מבוא לתכנות ב- JAVA תרגול 7

מהוא לתכנות ב- JAVA מעבדה 3

תרגול 1

תרגיל בית מספר 1#

שאלהIgal : מערכים דו מימדיים רקורסיה:

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

Slide 1

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

שאלהIgal : מערכים דו מימדיים רקורסיה:

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

Microsoft Word - ExamA_Final_Solution.docx

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - Ass1Bgu2019b_java docx

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

PRESENTATION NAME

Microsoft Word - c_SimA_MoedB2005.doc

מבוא למדעי המחשב

תוכן העניינים

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

סדנת תכנות ב C/C++

תוכן העניינים

Microsoft Word B

Microsoft Word - SDAROT 806 PITRONOT.doc

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

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

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

שיעור 1

מבוא למדעי המחשב - חובלים

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

אוניברסיטת בן-גוריון המחלקה למדעי המחשב בוחן במבנים בדידים וקומבינטוריקה פרופ' מתיא כ"ץ, ד"ר עופר נימן, ד"ר סטוארט סמית, ד"ר נתן רובין, גב'

מבוא למדעי המחשב - חובלים

תרגיל 9 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד 1. תהי L השפה בעלת סימן פונקצייה דו מקומי G, סימן פונקציה חד מקומי T, סימן יחס תלת מקומי.c, d וקבועים L

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

מבוא למדעי המחשב

מס' ת"ז מס' מחברת מבחן בקורס מבוא מורחב למדעי המחשב CS1001.py ביה"ס למדעי המחשב, אונ' תל אביב סמסטר א' , מועד ב, 23/3/2018 מרצים: דניאל דויטש,

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מבוא ללוגיקה ולתורת הקבוצות

Python 2.7 in Hebrew

PowerPoint Presentation

הגשה תוך שבוע בשעת התרגול

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

מצגת של PowerPoint

PowerPoint Presentation

ex1-bash

הגשה תוך שבוע בשעת התרגול

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

ב ה. ד. ג. ב. ב. אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, חורף :22 תרגיל בית מספר 6 - להגשה עד 66 בינואר 3162 בשעה קיר

PowerPoint Presentation

1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_match הפונקציה preg_m

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

מבוא לתכנות ב- JAVA תרגול 11

Microsoft Word - c_SimA_MoedA2006.doc

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

Slide 1

תכנון אלגוריתמים עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 02: , בצהריים,תא מספר 66 בקומת כניסה של בניין 003 מתרגל אחראי: אורי 0

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

Slide 1

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

תיק משימטיקה מגרף הנגזרת לגרף הפונקציה להנגשה פרטנית נא לפנות: כל הזכויות שמורות

<4D F736F F D20F9E9F2E5F820F1E9EEF0E920E7ECE5F7E4>

Slide 1

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

PowerPoint Presentation

מבוא למדעי המחשב

מדריך למרצים ומתרגלים 1

תרגול 3 - מערכים

מקביליות

תרגול מס' 1

234114

Slide 1

Slide 1

מטלת מנחה (ממ"ן) 11 הקורס: חשבון אינפיניטסימלי II חומר הלימוד למטלה: יחידות 2,1 4 מספר השאלות: 7 משקל המטלה: נקודות סמסטר: ב 2007 מו

<4D F736F F D20FAF8E2E5EC20E0ECE2E1F8E420EEF2E5F8E D F9E0ECE5FA2E646F63>

מועד: א בחינה סופית במתמטיקה דיסקרטית משך הבחינה: 2 1 שעות מרצה: פרופ' תאופיק מנסור תאריך: סמסטר: א תשע"ח m 2 הוראות לנבחן: )1( הבחינה מו

ðñôç 005 î

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

Slide 1

תכנות בשפת פייתון ברק גונן

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

Microsoft Word - עבודת פסח לכיתה י 5 יחל.doc

Microsoft Word - 01 difernziali razionalit

מבוא למדעי המחשב

יום עיון עורכי בקשות להיתרים

Tutorial 11

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

מקביליות

<4D F736F F D20F4FAF8E5EF20EEE5F2E320E020F1EEF1E8F820E120FAF9F2E3>

תמליל:

תרגיל בית מספר - 2 להגשה עד 02/04/2019 בשעה 23:55 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הגשה: תשובותיכם יוגשו בקובץ pdf ובקובץ py בהתאם להנחיות בכל שאלה. השתמשו בקובץ השלד skeleton2.py כבסיס לקובץ ה py אותו אתם מגישים. לא לשכוח לשנות את שם הקובץ למספר ת"ז שלכם לפני ההגשה, עם סיומת.py בסה"כ מגישים שני קבצים בלבד. עבור סטודנטית שמספר ת"ז שלה הוא 012345678 הקבצים שיש להגיש הם hw2_012345678.pdf ו-.hw2_012345678.py הקפידו לענות על כל מה שנשאלתם. אין להגיש תשובות סרוקות בכתב יד. יש לוודא כי בקובץ ה- py המוגש אין קריאה לטסטר ו/או הדפסות מיותרות. בקובץ ה- pdf יש לציין במפורש את מספר השאלה והסעיף של כל תשובה. תשובות מילוליות והסברים צריכים להיות תמציתיים, קולעים וברורים. להנחיה זו מטרה כפולה: 1. על מנת שנוכל לבדוק את התרגילים שלכם בזמן סביר. 2. כדי להרגיל אתכם להבעת טיעונים באופן מתומצת ויעיל, ללא פרטים חסרים מצד אחד אך ללא עודף בלתי הכרחי מצד שני. זוהי פרקטיקה חשובה במדעי המחש

שאלה 1 להלן פונקציה שהופכת בין מפתחות )keys( לערכים )values( של מילון. def reverse_dict(d): return {y:x for x,y in d.items()} הסבירו מדוע פונקציה כזו יכולה לעבוד רק על מילונים שבהם מיוצגת פונקציה חד-חד ערכית, ובנוסף שבה כל הערכים )values( הם טיפוסים בפייתון שהם.immutable כאשר פונקציה מקבלת פרמטר,mutable היא יכולה לשנות אותו במקום,)in-place( או לייצר אובייקט חדש. לדוגמה, הפונקציה sorted של פייתון יכולה לשמש למיון של רשימות, והיא יוצרת רשימה חדשה )ממויינת( בזיכרון. לעומת זאת כאשר כותבים L.sort() עבור רשימה L, המיון נעשה במקום. ג. האם הפונקציה reverse_dict הנ"ל מייצרת מילון חדש או משנה את האיברים של המילון שהיא מקבלת? כתבו את תשובתכם בקובץ ה-.pdf הצדיקו את תשובתכם ע"י שימוש בפונקציה id של פייתון וצירוף הפלט לתשובה. לפניכם קטע קוד קצר המאתחל מספר מילונים: dic1 = {i:id(i) for i in range(1000)} dic2 = {i:10 for i in range(1000)} dic3 = {i:[i] for i in range(1000)} עבור כל אחד מהמילונים, רשמו בקובץ ה- pdf האם הפעלה של הפונקציה reverse_dict על המילון תעבוד כנדרש )כלומר, תחזיר מילון שבו כל ערך מהמילון המקורי ממופה למפתח שלו(. הצדיקו את תשובתכם בקצרה. ד. להלן ניסיון לממש פונקציה כנ"ל, שבה השינוי יהיה במילון שהתקבל בפרמטר לפונקציה )כלומר לא ייווצר מילון חדש, אלא הערכים הפנימיים של d ישתנו(. def reverse_dict(d): for k in d: d[d[k]] = k d.pop(k) הסבירו בדיוק מדוע הפונקציה הזו לא עובדת נכון. לשם כך, אפשר להשתמש ב- Pythontutor שראיתם בתרגול, או להוסיף פקודות הדפסה, כדי לעקוב אחר מה שמתרחש. ה. ממשו בקובץ השלד גרסה של הפונקציה הנ"ל שנקראת,reverse_dict_in_place(d) שתשנה את המילון שהיא קיבלה, במקום )כלומר לא ייווצר מילון חדש, אלא הערכים הפנימיים של d ישתנו(. ודאו שהכתובת בזיכרון של המילון שהועבר לפונקציה לא השתנה. לדוגמה: >>> d = {1:2, 3:"a"} >>> hex(id(d))

'0x2aab198' >>> reverse_dict_in_place(d) >>> d {2: 1, 'a': 3} >>> hex(id(d)) '0x2aab198'

שאלה 2 בשאלה זו ננתח את מספר פעולות הכפל שמתבצעות בחישוב הפונקציה הבאה )שראינו בכיתה, במצגת 5b( a b )בשאלה זו הניחו כי מקבלת שני פרמטרים a,b ומחשבת את a. b a,b שלמים חיוביים(. def power(a,b): """ computes a**b using iterated squaring """ result=1 while b>0: # b is nonzero if b % 2 == 1: # b is odd )פעולת כפל אחת( # result*a result = )פעולת כפל אחת( # a*a a = b = b//2 return result נרצה לספור כמה פעולות כפל מתבצעות ע"י הפונקציה power )השורות בהן מבוצעת פעולת כפל מסומנות לנוחיותכם בקוד שלעיל(. נתונים לנו שני מספרים עשרוניים: a שהייצוג הבינארי שלו מכיל n ביטים, ו- b שהייצוג הבינארי שלו מכיל m ביטים. תנו ביטוי מדויק כפונקציה של n ו/או m למספר הקטן ביותר האפשרי של פעולות כפל שמתבצעות ע"י?power תנו ביטוי מדויק כפונקציה של n ו/או m למספר הגדול ביותר האפשרי של פעולות כפל שמתבצעות ע"י?power שימו לב שהתשובות בשני הסעיפים צריכות להיות כלליות )עבור כל n ו- m(, ולא עבור מספרים ספציפיים. בכל אחד מהסעיפים הללו הסבירו את התשובה, וציינו מה צריך להיות המבנה של a ו/או b כדי שנקבל מספר של פעולות כפי שציינתם. השלימו בקובץ השלד את הפונקציה power_new שבהינתן,a b מחשבת את a b תוך ביצוע אותו מספר של פעולות כפל כמו הפונקציה power שלמעלה. יש להשלים 3 שורות בלבד. def power_new(a,b): """ computes a**b using iterated squaring """ result = 1 b_bin = bin(b)[2:] reverse_b_bin = b_bin[: :-1] for bit in reverse_b_bin: return result

שאלה 3 בשאלה זו נעסוק בהיבטים שונים של ייצוג מספרים בבסיסים שונים. כמה ביטים יש בייצוג הבינארי של המספר העשרוני?19 2019 ענו על השאלה בשתי דרכים שונות: )1( תוך שימוש בנוסחה שראיתם בתרגול, )2( באמצעות הפיכת המספר מ- integer ל- string, ומדידת אורך המחרוזת באמצעות.len() צרפו לקובץ ה pdf את התשובה, וכן שתי שורות קוד בודדות )לא כולל פקודת )import אחת לכל אופן פתרון - שמבצעות את החישו הדרכה: מומלץ להשתמש בפונקציה log(x,base) של המודול,math אשר מחשבת את הלוגריתם של x בבסיס.base ממשו את הפונקציה inc(binary) )קיצור של )increment אשר מקבלת מחרוזת המייצגת מספר טבעי בכתיב בינארי )כלומר מחרוזת המורכבת מאפסים ואחדות בלבד(. הפונקציה תחזיר מחרוזת המייצגת את המספר הבינארי לאחר תוספת של 1.הערה: מחרוזת שמייצגת מספר בינארי לא תכיל אפסים מובילים )משמאל(, למעט המספר 0 שמיוצג ע"י המחרוזת "0". דוגמאות הרצה: >>> inc("0") '1' >>> inc("1") '10' >>> inc("101") '110' >>> inc("111") '1000' >>> inc(inc("111")) '1001' להלן המחשה של אלגוריתם החיבור של מספרים בינאריים )בדומה לחיבור מספרים עשרוניים עם נשא 1 (carried digits) 1 0 1 (binary) + 1 ------------- = 1 1 0 :))carry( הנחיה: אין להמיר את binary לבסיס עשרוני. בפרט, אין להשתמש כלל בפונקציה int של פייתון או בפונקציה convert_base מתרגול 3. יש לממש את האלגוריתם בהתאם להמחשה: ישירות באמצעות לולאות.

ג. ממשו את הפונקציה bin2) add(bin1, אשר מקבלת שתי מחרוזות המייצגות מספרים טבעיים בכתיב בינארי )כלומר מחרוזות המורכבת מאפסים ואחדות בלבד(. הפונקציה תחזיר מחרוזת המייצגת את המספר הבינארי המתקבל מחיבור bin1 ו- bin2. כמו בסעיף הקודם: מחרוזת שמייצגת מספר בינארי לא תכיל אפסים מובילים )משמאל(, למעט המספר 0 שמיוצג ע"י המחרוזת "0". דוגמאות הרצה: >>> add('10', '0') '10' >>> add('0', '0') '0' >>> add('11', '101') '1000' הנחיה: אין להמיר את מחרוזות הקלט לבסיס עשרוני. בפרט, אין להשתמש כלל בפונקציה int של פייתון או בפונקציה convert_base מתרגול 3. בנוסף, על הפונקציה add לקרוא לפונקציה inc מהסעיף הקודם. ד. בשקף 14 של מצגת 5a בינארי. היותר נטען כי מספר בעל d ספרות עשרוניות ידרוש לכל היותר 10 dlog 2 ביטים בכתיב למעשה, הדבר נכון לכל שני מספרים טבעיים 1< c,b: מספר בעל d ספרות בבסיס b ידרוש לכל.c ספרות בבסיס dlog c b הוכיחו טענה זו. השתמשו בטענה כי מספר N בעל d ספרות בבסיס כלשהו.b d 1 N < b d מקיים b>1 שימו לב כי ניתן לכתוב את הוכחה מלאה בכ- 2-3 שורות קצרות, עם כמה מעברים אלגבריים פשוטים.

שאלה 4 בהינתן טבעי n, כל טבעי k שקטן ממש מ- n ומחלק את n נקרא מחלק ממש של n. סדרת מחלקים היא סדרת מספרים, שהראשון שבהם הוא מספר טבעי כלשהו, וכל איבר שווה לסכום המחלקים ממש של קודמו בסדרה. אם מגיעים ל- 0 הסדרה מסתיימת )שכן ל- 0 אין מחלקים(. למשל, להלן סדרת מחלקים שמתחילה ב- 45: סדרות מחלקים נחלקות ל- 3 סוגים: 1. סדרות שמסתיימות ב- 0 )סדרות סופיות(. 2. סדרות שלא מגיעות ל- 0 לעולם )אינסופיות(, שנכנסות למעגל מחזורי כלשהו. 3. סדרות שלא מגיעות ל- 0 לעולם )אינסופיות(, שלא נכנסות למעגל מחזורי כלשהו )סדרות כאלו חייבות להיות בלתי חסומות(. ישנן סדרות שלא ידוע לאיזה סוג הן שייכות. למעשה לא ידוע אם בכלל יש סדרות מהסוג השלישי זוהי שאלה פתוחה במתמטיקה. הסבירו בקצרה מדוע יש אינסוף סדרות מהסוג הראשון, ומדוע יש סדרות מהסוג השני )רמז: מספרים מושלמים(. ידוע שכל המספרים בתחום בין 1 ל- 275 )כולל( מתחילים סדרה ששייכת לאחד משני הסוגים הראשונים הנ"ל )לגבי 276 אגב, לא ידוע כיום לאיזה סוג הוא שייך...(. נרצה לדעת כמה מתוכם הם התחלה של סדרה סופית )מסוג 1(. לשם כך עליכם להשלים בקובץ השלד את הפונקציות הבאות: 1. הפונקציה,sum_divisors(n) אשר מקבלת מספר שלם חיובי n, ומחזירה את סכום המחלקים-ממש שלו. דוגמאות הרצה )בעמוד הבא): >>> sum_divisors(4) 3 >>> sum_divisors(220) 284 הנחייה מחייבת: בפונקציה לא תהיה יותר מלולאה אחת. עבור קלט n, על הלולאה שבפונקציה לבצע לא יותר מ- n איטרציות. פונקציות שמבצעות מספר איטרציות בסדר גודל גבוה יותר )למשל בערך 2/n איטרציות( אינן עומדות בתנאי זה. הפונקציה is_finite(n) שמחזירה True אם סדרת המחלקים שמתחילה במספר n היא סופית, כלומר שייכת לסוג 1, ו- False אם היא שייכת לסוג 2. דוגמת הרצה:.2

>>> is_finite(4) True >>> is_finite(220) False הנחיה מחייבת: השתמשו ב-.sum_divisors הפונקציה cnt_finite(limit) שמחזירה כמה מספרים בין 1 ל- limit )כולל( הם התחלה של סדרה סופית. הנחיה מחייבת: הפונקציה תקרא ל-,is_finite וזו בתורה תקרא כאמור ל-.sum_divisors.3 בקובץ ה- pdf רישמו את התשובה עבור.limit=275 ג. התבוננו שוב בהגדרת הפלט של.is_finite מיכל הציעה לדרוש שהפונקציה תחזיר False בכל מקרה שהסדרה אינה מסוג 1, כלומר גם כאשר היא מסוג 2 וגם כאשר היא מסוג 3. אמיר התנגד להוספת דרישה זו לתרגיל. מדוע? ד. ה. זוג מספרים שונים יקראו מספרים ידידים numbers( )Amicable אם סכום המחלקים ממש של האחד שווה לשני ולהיפך. לדוגמא: הזוג )220, 284( הינם מספרים ידידים, שכן סכום המחלקים ממש של 220 הוא: + 4 1 + 2 + = 284 110 5 + 10 + 11 + 20 + 22 + 44 + 55 + ואילו סכום המחלקים ממש של 284 הוא + 1.2 + 4 + 71 + 142 = 220 הוסיפו לקובץ השלד המצורף מימוש לפונקציה is_amicable(n) שמקבלת מספר n ומחזירה ערך בוליאני באופן הבא: אם קיים מספר k n כך שהזוג (k,n) הינם מספרים ידידים אזי הפונקציה תחזיר,True אחרת תחזיר.False דוגמאות הרצה: >>> is_amicable(220) True >>> is_amicable(6) False נרצה לדעת כמה זוגות של מספרים ידידים ישנם כך שלפחות אחד מהמספרים בזוג קטן מ- 100,000. הוסיפו לקובץ השלד המצורף מימוש לפונקציה, count_amicable_numbers(limit) אשר מקבלת מספר חיובי, limit ומחזירה כמה זוגות של מספרים ידידים ישנם כך שלפחות אחד מהזוג קטן או שווה ל- limit. בנוסף, את התוצאה שקיבלתם עבור limit=100,000 הוסיפו לקובץ ה- pdf. הנחייה מחייבת: יש לספור כל זוג פעם אחת בלבד, כלומר, אין לספור פעמיים את הזוג )220, 284( והזוג.)220,284(

שאלה 5 בשאלה זו נעסוק בבדיקת השערת גולדבאך. השערת גודלבאך אומרת כי כל מספר זוגי גדול מ- 2 הוא סכום של שני מספרים ראשוניים. ג. ד. לקובץ התרגיל צורף הקובץ primes.txt אשר מכיל את כל המספרים הראשוניים עד 10000. השלימו בקובץ השלד את הפונקציה parse_primes(filename) שמקבלת את שם הקובץ כמחרוזת ומחזירה קבוצה )set( של כל המספרים הראשוניים הכתובים בקובץ. השלימו בקובץ השלד את הפונקציה set) check_goldbach_for_num(n, primes_ אשר מקבלת מספר זוגי גדול מ- 2 בשם n ואת קבוצת המספרים הראשוניים שייצרתן בסעיף א', ומחזירה True אם המספר מקיים את ההשערה ו- False אחרת. ניתן להניח כי הקלט תקין. השלימו את הפונקציה primes_set) check_goldbach_for_range(limit, אשר מקבלת מספר גדול מ- 2 בשם limit ואת קבוצת המספרים הראשוניים מסעיף א' ובודקת את ההשערה עבור כל המספרים הזוגיים הגדולים מ- 2 עד ל- limit )לא כולל(. בדקו את ההשערה עם.limit=10000 כתבו בקובץ ה- pdf מהו זמן הריצה של הפונקציה. כעת נרצה לאסוף סטטיסטיקות על המספרים שמקיימים את ההשערה ובפרט, כמה זוגות ראשוניים יכולים להרכיב מספר מסוים. למשל, 23+7=30 אבל גם 19+11=30. כלומר יתכנו מספר זוגות ראשוניים שמרכיבים את אותו מספר זוגי. השלימו בקובץ השלד את הפונקציה primes_set) check_goldbach_for_num_stats(n, אשר תחזיר את מספר זוגות הראשוניים שיכולים להרכיב מספר n המתקבל כקלט. השלימו בקובץ השלד את הפונקציה primes_set) check_goldbach_stats(limit, אשר תחזיר מילון בו המפתחות יהיו מספר זוגות הראשוניים המרכיבים את כל המספרים עד limit )לא כולל(. הערך של כל מפתח יהיה כמות המספרים הזוגיים שיכולים להיות מורכבים ממספר זוגות זה. למשל, אם יש חמישה מספרים זוגיים שיכולים להיות מורכבים ע"י שני זוגות ראשוניים, המילון יכיל את הכניסה = 5 [2]d. הערה: שימו לב לא לספור זוגות פעמיים! הריצו את primes_set) check_goldbach_stats(limit, עבור limit=1000 וצרפו לקובץ ה- pdf את המילון המוחזר. דוגמאות הרצה: >>> check_goldbach_for_num_stats(20, primes_set) שני זוגות ראשוניים מרכיבים את 2 # 20 >>> check_goldbach_for_num_stats(10, primes_set) שני זוגות ראשוניים מרכיבים את 2 # 10 >>> check_goldbach_stats(11, primes_set) {1: 3, 2: 1} # 4,6,8 מורכבים מזוג אחד ו- 10 מורכב משני זוגות סוף.