ה n בסיבוכיות של חישוב מספר ראשוני

zag78

New member
ה n בסיבוכיות של חישוב מספר ראשוני

כשמדברים על סיבוכיות של n או n^2 וכדומה בחישוב האם מספר הוא ראשוני, מהו ה-n?
האם זה ערך המספר, מספר הספרות, או מספר הביטים שנדרשים לייצג את המספר כבינארי?
אם לדוגמא, אנו צריכים לבדוק האם ארבעה מיליארד ואחד הוא מספר ראשוני:
אם נקבע את הn לפי ערך המספר, אז n הוא ארבעה מיליארד ואחד.
אם נקבע לפי מספר הספרות, אז n הוא 10.
ואם לפי מספר הביטים, אז n הוא 32.
 

1ca1

New member
מספר הספרות ומספר הביטים הוא כמעט ביטוי זהה

אחד זה lnn (מספר הביטים), ואחד זה lnn/ln10 (מספר הספרות בבסיס עשרוני).
&nbsp
לרוב מדברים על n כעל המספר עצמו. מה שכן ואתה צודק בכך, חשוב לראות איך מוגדר מודל החישוב שלך. יש מקומות שמניחים שפעולות אריתמטיות הן אבסולוטית O(1) ויש כאלה שמדברים אשכרה על מימוש במחשב, ואז בפעולות אריתמטיות יש חישוב למספר הביטים של המספר.
 
לא מסכים

באלגוריתמים של בדיקת ראשוניות, פירוק לגורמים וכיו"ב הסיבוכיות היא ביחס לאורך הקלט- כלומר log n.
אם הסיבוכיות היתה ביחס למספר n עצמו אז גם לבדיקת ראשוניות וגם לפירוק לגורמים היה אלגוריתם טריוויאלי בזמן nlog n, שעובר על כל המחלקים הפוטנציאליים בין 2 ל- n-1.
 
כפי שאסף כתב,

זה לא משנה כי הפרמטרים האלה נבדלים זה מזה רק בקבוע כפלי.
 

1ca1

New member
יש טעות קולמוס

כמובן כמות הביטים היא lnn/ln2 וכמות הספרות העשרונית היא lnn/ln10.
ואם רוצים להיות עוד יותר פדנטיים - צריך את ה-ceiling של הביטויים הללו, לקבלת מספר שלם.
 
אם להיות פדנטיים

אז צריך את ה-floor + 1. (אבל לא חייבים להיות פדנטיים
)
 

במנו

New member
בד"כ מדברים על המספר עצמו

לדוגמא סיבוכיות של n^2 אומרת שאתה צריך n^2 פעולות חישוב בשביל לבצע זאת.
 
למעלה