אחד...

RichardSmith

New member
תגובה לשרשור של מתן,

לתגובתו לשרשור של MW. הייתי מעדיף לנסח זאת בקוד:
public class r { public static void main (String s[]) { double g=0; for (int i=0; i<∞; i++) for(int j=0; j<∞; j++) for(int k=0; k<∞; k++) for(int h=0; h<∞; h++){ g=Math.pow(i, 2)+Math.pow(j, 2)+Math.pow(k, 2)+Math.pow(h, 2); System.out.println(""+(int)g); } } }​
יותר אלגנטי.
 

MajorWinters

New member
אני לא ממש יודע ג'אווה...

אבל לפי C, אני יכול בערך להבין מה שקורה שם, אלא אם אני מבין לא נכון. לדעתי יש לך טעות... בהנחה שg לא מספר עם שורש שלם, אז h פשוט ימשיך לרוץ לנצח. לא אמרת לו להפסיק אם הוא עובר את g. אני חושב
וגם זה לא היה נראה כמו משפט תנאי, אבל זה אולי כבר קשיי שפה.
 
אני חושב שהבנתי מה הולך שם

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

מתן4ל

New member
אני מדמיין לעצמי את ריצארד עם המחשב

אני מדמיין לעצמי את ריצארד עם המחשב פנטיום אלף-אפס הרץ שלו... בא אליו גולדבאך - תבדוק לי רגע את ההשערה שלי - ריצארד מריץ את כל המספרים ואחרי שניה מחזיר לו פלט שההשערה נכונה. בא אליו קספארוב - תגיד לי אם לבן תמיד יכול לנצח בשחמט - ריצאר מחזיר פלט - לא, זה תמיד תיקו - ככה שחור יכול לשחק כדי להשיג תיקו (ונותן לו נייר אינסופי אם כל המצבים על לוח שחמט ומה שחור צריך לעשות). בא אליו טיורינג שיפתור לו את בעיית העצירה - וריצארד פותר, ואז בא אליו ילד קטן ושאל אותו - תגיד יש מספר ממשי שאם תעלה אותו בריבוע תקבל 2? ואז ריצאר מריץ את המחשב - מחכה אלף אפס שניות, והתוכנה לא עוצרת מחכה עוד אלף אפס שניות, והתוכנה לא עוצרת... ואז ריצארד אומר לו מצטער אני לא יכול להוציא שורש עם המחשב הזה - חכה שיצא פנטיום א...
 

MajorWinters

New member
אבל...

בהנחה שריצ'ארד יעשה את הדבר הנ"ל, אז הוא לא יזכה במליון דולר על כך שפתר אותן, כי הוא עשה זאת בעזרת מחשב, ולא ע"י הוכחה פורמלית...
 

מתן4ל

New member
נכון, אבל אם הוא רוצה את הפרס

נכון, אבל אם הוא רוצה את הפרס הוא יכול להריץ את המחשב על כל ההוכחות הפורמאליות (התקפות) ולמצוא את הראשונה שהמסקנה שלה היא שהערת גולדבך נכונה... (אם כי ייתכן שאין הוכחה כזו - ואז הוא יוכל לשלוח את המחשב לחפש הוכחה שאין הוכחה כזו [וייתכן שהוא לא ימצא
])
 

MajorWinters

New member
וברגע שייתכן שאת שניהם לא יימצא

אז מה עוזר לו מחשב פנטיום-א0... אי אפשר לנצח את המתמטיקה
 

מתן4ל

New member
אבל הוא לפחות יידע שזה בלתי אפשרי

להוכיח את המשפט הזה (למרות שהוא נכון)... חוץ מזה גדל כבר הוכיח מתמתית שאי אפשר לנצח את המתמתיקה
 

מתן4ל

New member
א) למה לא עם רקורסיה...

אם לא היית יודע שיש חסם עליון של 4 איך היית מסתדר?
public class r { private static void mySum(int array[]) { if(array.isEmpty) return 0; x=array.pop(); return (mySum(array)+x) array.add(x); } void main (String s[]) { for (int i=0; i<∞; i++) seek(new array(),i); } private static void seek(List array,int target) { if (mySum(array)==target) System.out.println(array.toString()+"="mySum(array)); double g=0; for (int i=0; i<target; i++) { array.add(i); seek(array,target); array.remove(i); } }​
(לצורך העיניין POP מוציא את אחד האיברים במערך ומחזיר אותו כתוצאה, ADD מוסיף איבר, REMOVE מסיר איבר, ISEMPTY בודק אם המערך ריק (אם אין מבנה נתונים כזה בJAVA אפשר בקלות ליצור אחד כזה...) ב) התוכנה שלך לא מדפיסה לכל מספר איך מגיעים אליו, היא מדפיסה את כל המספרים (משום מה בלי איך מגיעים אליהם) בצורה מבולגנת - רק אם תמיין אותם לפי התוצאה זה יהיה בסדר... ג) וזה הכי קריטי - התוכנה שלך לא עוצרת, ומה שיותר גרוע היא לא מצליחה להגיע לתוצאה 4 אף פעם!. [התוכנה שלי עוצרת אבל שים לב ש: *היעילות שלה היא N בחזקת 4 (או N בחזקת 2 עם שיפור קטנטן) לכל מספר * היא לא שומרת תוצאות (אפשר לפתור את אותה בעיה לכל המספרים עד N ביעילות של N בריבוע - במקום לפתור את זה למספר ספציפי).]
 

MajorWinters

New member
עם כמה חוקים פשוטים אפשר לייעל

כמו עם מספר נכתב עם 2 ספרות אפשר לכתוב בקלות מספר גדול ממנו פי 2. עם יש לו שורש שלם אז אפשר בקלות מספר שגדול ממנו פי 2 ופי 3. ועוד חוקים פשוטים שאפשר להכניס למכונה ולייעל...
 

מתן4ל

New member
|+| כל הכבוד

אבל זה מייעל קצת, הקטע הכי יפה הוא שמספיק לעבור רק על הראשוניים - כי אם אתה ידע איך ליצור את 2 הגורמים אתה יכול לדעת איך ליצור את המכפלה שלהם. זה כבר חוסך *ממש* הרבה (מחלק בLOG N).
 

RichardSmith

New member
התוכנה שלי מגיעה ל 4!

כאשר כל משתנה על 1 זה 4. (בהנחה שהתוכנה מסיימת את h...)
 

מתן4ל

New member
טוב, אני חוזר בי

התכוונתי לזה שהתוכנה לא תסיים את H - אבל אז התחלתם עם האלף אפס הזה - אגב אפשר לעבור על כל הרביעיות של המספרים עם לולאה אינסופית אחת ככה שאם תשנה קצת את התוכנה זה יסתדר לך...
 
למעלה