מסתבר שעובד - סימן ראשון לעצלות זה חוסר היכולת לחקור את הבעיה שלך.
הסימן הזה הוא אופרטור מודולו, חלוקת שארית. כלומר:
5 / 2.0 = 2.5
5 % 2 = 1 (בגדול 2 עם שארית 1)
ליותר דוגמאות ומידע - חפש בגוגל
יש לי 2 מספרים שאני עושה ביניהם מודולו
התוצאה היא שארית החלוקה בין 2 המספרים
לדוגמא
10 לחלק ל 3 הוא שבר, יוצא 3 ושליש אחד
כאשר עושים חלוקת שארית אתה בעצם אומר 3 נכנס ב10 בדיוק 3 פעמים עם שארית 1 (כי 3 כפול 3 זה 9)
א. שארית מעגלית ביחס למחלק, כלומר שארית חלוקה במספר n יכולה להיות כל מספר החל מ 0 עד n-1
ב. עולם ה security כולו בערך חיי על חשבון מדולרי
ג. כווווולם משתמשים בחשבון מודולרי ביום יום ואפילו לא מודעים לזה (שעון קיר אנלוגי הדוגמא הכי טבעית לזה)
עד כמה שאני יודע מה זה שארית ואיך זה עובד לומדים לאורך כיתה ב' בערך (למרות שעם מערכת החינוך שלנו אולי כבר הגיע לכיתה י')
ולומדים את זה לעומק כשלומדים קריפטוגרפיה במהלך התואר.
בקטן צריך לספור את השאריות לאחור 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 (את תספרי תראי שיש בדיוק 24 מספרים שספרתי לאחור) ככה שהפיתרון הוא 4
דרך נוספת: בואי נחבר ל 24- את המספר 7 עד אשר התוצאה לא תהיה בטווח שבין אפס (כולל) לבין 7 (לא כולל)
-24 + 7 = -17
-17 + 7 = -10
-10 + 7 = -3
-3 + 7 = 4 (הגענו לתנאי עצירה)
יש עוד כמה וכמה דרכים להראות את זה... [URL]https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic[/URL]
אחרי שתעייני באתר תעני לי על השאלה
-24 = x(mod7)
מה הוא x? כמה פיתרונות יש?
-24 % 7
ב C ( או C++ ) התוצאה יוצאת 3- ולא 4 ( ואני מניח שבעוד שפות זה ככה גם ב גאווה ). וזה בניגוד להגדרה המתמתית המקובלת ששארית צריכה להיות חיובית.
היה לי פעם בג בתוכנה בגלל שחשבתי בטעות שהאופרטור % תמיד יתן מספר חיובי וגיליתי שאם המחולק הוא מספר שלילי אז השארית יוצאת גם מספר שלילי . לכן הוספתי בדיקה שאם השארית יוצאת שלילית אני מוסיף לה את ערך המחלק כדי לקבל חיובי ( בדוגמה הזאת מוסיף 7 לתוצאת שארית שלילית כדי לקבל את הערך בטווח 0....6)
כשמימשו את אופרטור המודולו בשפות היו צריכים לבחור את צורת המימוש (היחס === הוא סימן מתמטי של = רק עם 3 פסים במקום 2) r === x(mod n) we say that r is congruent to x meaning : r mod n = x mod n
במקרה שלנו -3 === 4 mod 7 meaning -3 mod 7 = 4 mod 7
עכשיו נשאלת השאלה איך בכל שפה ושפה החליטו לממש את תוצאת המודולוס, האם לתת לתוצאה את סימן המחולק או לא לתת לו.
ללא ספק היכרות של איך שפת העבודה שלך מממשת את הדברים האלה זה חשוב כדי להמנע מבאגים (נגיד hash שלילי או משהו כזה)
לפי חשבון מדולרי נרצה לייצג כל מספר x בצורה הבאה:
x = q*n + r; where 0 <= r < n and q is the quotient of x/n
עכשיו נחפש את הפיתרון למשוואה שלנו
-24 = q * 7 + r ===> r = -24 - 7q
בואי נחפש q שמקיים את המגבלה על r (נזכור: r חיובי בין 0 לבין n לא כולל):
עבור q=-1 התוצאה שלנו 17-, שלא מתאים לתנאי של r
עבור q=-2 התוצאה שלנו 10-, שלא מתאים לתנאי של r
עבור q=-4 התוצאה שלנו 4, מה שתואם את התנאי של r
עבור q=-5 התוצאה שלנו תהיה 11 (35-24) מה ששוב מוציא אותנו מחוץ לגבולות של התנאי...