מבוא לתכנות מדעי
3חלק 4הרצאה
מספרים ראשונים
2016Igor Kleiner
מטרה
לכתוב תוכנה שבודקת האם מספר הוא ראשוני
לפתח אלגוריתם שבודק האם מספר הוא ראשוני או לא
מספר ראשוני
ומתחלק ללא 1-הוא מספר שלם חיובי שגדול מ(prime number)מספר ראשוני •ובעצמו1-שארית רק ב
מספר ראשוני
ומתחלק ללא 1-הוא מספר שלם חיובי הגדול מ(prime number)מספר ראשוני •:ובעצמו1-שארית רק ב
:למשל•
הם מספרים ראשונים2,3,5,7,11,13,17,19,23,29•
הם מספרים לא ראשוניים4,6,9,82,100,121:ומספרים•
מספר ראשוני
ומתחלק ללא 1-הוא מספר שלם חיובי הגדול מ(prime number)מספר ראשוני •:ובעצמו1-שארית רק ב
:למשל•
הם מספרים ראשונים2,3,5,7,11,13,17,19,23,29•
הם מספרים לא ראשוניים4,6,9,82,100,121:ומספרים•
קיים אינסוף מספרים ראשונים: עובדה•
אלגוריתם
כתוב אלגוריתם הבודק האם מספר נתון הוא ראשוני או לא•
אלגוריתם
כתוב אלגוריתם הבודק האם מספר נתון הוא ראשוני או לא•
:תיור כללי של פתרון•
אלגוריתם
כתוב אלגוריתם הבודק האם מספר נתון הוא ראשוני או לא•
:תיור כללי של פתרון•
קבלת קלט ממשתמש1.
אלגוריתם
כתוב אלגוריתם הבודק האם מספר נתון הוא ראשוני או לא•
:תיור כללי של פתרון•
קבלת קלט ממשתמש1.
וממינו1-בדיקת האם יש למספר מחלקים ששונים מ2.
הדפסת תוצאת בדיקה3.
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
.2
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 2.:ללא שארית אזיN-מתחלק בXאם 1)
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 2."מספר לא ראשוני"ללא שארית אפשר לעצור את התוכנה ולהדפיס N-מתחלק בXאם 1)
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 2.ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.3X הוא .........
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 2.ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.3Xלא ראשוני"נדפיס למסך , הוא לא ראשוני"
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 1.
ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.1Xנדפיס למסך לא ראשוני, הוא לא ראשוני
raw_input
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 1.
ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.1Xנדפיס למסך לא ראשוני, הוא לא ראשוני
raw_input
while
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 1.
ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.1Xנדפיס למסך לא ראשוני, הוא לא ראשוני
raw_input
while
ifprintbreak
אלגוריתם
X-נסמן את הקלט ב. קבלת קלט ממשתמש1.
ללא שאריתN-מתחלק בXנבדוק האם N=2,3,4,….,X-1לכל 1.
ללא שארית אפשר לעצור את התוכנה והדפיס מספר לא ראשוניN-מתחלק בXאם 1)
.1Xנדפיס למסך לא ראשוני, הוא לא ראשוני
raw_input
while
printbreak
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_0.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_0.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_0.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_0.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_2.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_2.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_2.py
תוכנה:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_2.py
15487469:כעת אנו יכולים לתרגם את האלגוריתם שלנו לתוכנה1.
http://www.codeskulptor.org/#user42_fMjvkLw36J_2.py
סיכוםרישוניכתבנו אלגוריתם שבודק האם מספר הוא מספר ראשוני או לא 1.
תרגמנו את האלגוריתם לתוכנה2.
ראינו שעבור מספרים ראשונים גדולים התוכנה רצה המון זמן3.
אלה מספיק לבדוק את כל ,N-עד1-אפשר להוכיח שאין טעם לבדוק כל המחלקים מ4.תיקון זה הופך את התוכנה לתוכנה הרבה יותר , sqrt(N)+1עד 1-המחלקים מ
(תרגיל בית)מהירה
• Igor Kleiner (Hebrew version adaptation 2016)