parsifal Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 καθως και γιατι το: >for(j=k=0;j<79;j++) ειναι εως το 79? Παρατήρησες ότι στην printf τυπώνει δυο-δυο τα ψηφία, έτσι;
Krokodilos Δημοσ. 18 Ιουνίου 2008 Μέλος Δημοσ. 18 Ιουνίου 2008 Παρατήρησες ότι στην printf τυπώνει δυο-δυο τα ψηφία, έτσι; LOL ναι 79·2=.... Και κανει τους υπολογισμους με βαση το 100 και οχι το 10, i wonder why. Γλιτωνει χαρακτηρες ετσι? Μαλλον....
ippo00 Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 > #include <stdio.h> main() { int i=101,j,k,A[200]={1}; while(--i) for(j=k=0;j<158;j++) k=i*A[j]+k/10,A[j]=k%10,i-1?0:printf("%d",A[157-j]); } 114 Αρχικά και εγώ το έκανα με βάση το 100
Aesmade Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 Ακόμα να τον καταλάβω καλά τον κώδικα, αλλά μπορεί να γίνει πιο σύντομος κατά 1 χαρακτήρα με τη χρήση του putchar. > #include <stdio.h> main() { int i=101,j,k,A[200]={1}; while(--i) for(j=k=0;j<158;j++) k=i*A[j]+k/10,A[j]=k%10,i-1?0:putchar(A[157-j]+48); }
ippo00 Δημοσ. 18 Ιουνίου 2008 Δημοσ. 18 Ιουνίου 2008 113 :Ο Βασικά αυτό που κάνει είναι να πολλαπλασιάζει όλους τους αριθμούς του πίνακα με έναν αριθμό αλλά αν προκύπτει αριθμός > 9 τότε μεταφέρει το υπόλοιπο στον αρίστερό πίνακα και το προσθέτει
Krokodilos Δημοσ. 3 Ιουλίου 2008 Μέλος Δημοσ. 3 Ιουλίου 2008 Με την ευκαιρια που ασχοληθηκα χθες με το θεμα των τελικων μηδενικων σε ενα παραγοντικο, θυμηθηκα αυτο που ειπες οποτε for what is worth: 100! = 100·99·98·...·3·2·1 Αν δεν κάνω λάθος, ο τελικός αριθμός έχει μόλις 3 μηδενικά στο λιγότερο σημαντικά ψηφία. ΥΓ: Φαίνεται πως έκανα λάθος, είναι αρκετά περισσότερα... 24 εχει. Ενας ευκολος και γρηγορος τροπος, χωρις να υπολογισουμε το αποτελεσμα του 100!(και γενικα καθε αριθμου Χ!), για να βρουμε ποσα μηδενικα εχει στο τελος ειναι ο εξης: Βρισκουμε εναν αριθμο Α τετοιον ωστε να ισχυει: 5^Α > 100 (γενικα 5^Α > Χ) Ειναι πιο ευκολο απο οτι φαινεται. Στην περιπτωση μας το Α=3 "μας κανει", αφου 5^3 = 125 ειναι μεγαλυτερο του 100. Ο αριθμος των μηδενικων του 100 λοιπον ειναι ισος με: \100/5^1/ + \100/5^2/ + \100/5^3/= \100/5/ + \100/25/ + \100/125/ = 20 + 4 + 0 = 24 Οπου \Χ/Υ/ ειναι το (ακεραιο) πηλικο της ευκλειδιας διαιρεσης Χ προς Υ.
ippo00 Δημοσ. 3 Ιουλίου 2008 Δημοσ. 3 Ιουλίου 2008 Μιάς και το αναστήσαμε το θέμα έφτιαξα ένα script για python το οποίο επιβεβαιώνει αυτό που λες (βαριόμουν να σκεφώ τι λες αλά δεν βαριόμουν να την υλοποίηση :Ρ) Οο Απλά άλλαξε την τιμή του m (default 6005) αν θές να παίξεις. > import os def calc(n): i,z =1,1 while i <= n: z *= i i += 1 os.system(['clear','cls'][os.name == 'nt']) print "stage" , i , "of" , n return z def testmodulo(q): i = 0 print "computing modulo" while q % 10 == 0 : q /= 10 i += 1 return i def testotherway(q) : z=5 i=0 print "computiong other way" while z < q: i += (q/z) z *= 5 return i m = 6005 h = calc(m) k = testmodulo(h) l = testotherway(m) print h print k print l
MJBulls23 Δημοσ. 10 Απριλίου 2013 Δημοσ. 10 Απριλίου 2013 Με την ευκαιρια που ασχοληθηκα χθες με το θεμα των τελικων μηδενικων σε ενα παραγοντικο, θυμηθηκα αυτο που ειπες οποτε for what is worth: 24 εχει. Ενας ευκολος και γρηγορος τροπος, χωρις να υπολογισουμε το αποτελεσμα του 100!(και γενικα καθε αριθμου Χ!), για να βρουμε ποσα μηδενικα εχει στο τελος ειναι ο εξης: Βρισκουμε εναν αριθμο Α τετοιον ωστε να ισχυει: 5^Α > 100 (γενικα 5^Α > Χ) Ειναι πιο ευκολο απο οτι φαινεται. Στην περιπτωση μας το Α=3 "μας κανει", αφου 5^3 = 125 ειναι μεγαλυτερο του 100. Ο αριθμος των μηδενικων του 100 λοιπον ειναι ισος με: \100/5^1/ + \100/5^2/ + \100/5^3/= \100/5/ + \100/25/ + \100/125/ = 20 + 4 + 0 = 24 Οπου \Χ/Υ/ ειναι το (ακεραιο) πηλικο της ευκλειδιας διαιρεσης Χ προς Υ. Μιας και ασχοληθηκα χθες λιγο με τον αριθμο των ψηφιων των παραγοντικων αριθμων, και θυμηθηκα αυτο το τοπικ με τον τυπο/μεθοδο περι του αριθμου των συνεχομενων μηδενικων που υπαρχουν στο τελος ενος παραγοντικου δινω εναν πραγματικα ενδιαφερον τυπο για τον συνολικο αριθμο των ψηφιων ενος παραγοντικου, πχ του Ν!. Και ενω ο τυπος για τον αριθμο των τελευταιων μηδενικων ψηφιων ισχυει για καθε αριθμο Ν!, ο τυπος για τον συνολικο αριθμο των ψηφιων του Ν! δεν ισχυει για μερικα Ν. Ιδου πως εχει η κατασταση: Ο καλυτερος τυπος αυτη τη στιγμη ειναι ο: Οπου Floor[a] ειναι το ακεραιο μερος του α, πχ Floor[14.01] = 14 , Floor[14.223] = 14 , Floor[7.982] = 7 ενω οπου ln(a) ειναι ο νεπεριος λογαριθμος του a. Ο τυπος αυτος ειναι μια βελτιωση του προηγουμενου τυπου που ισχυε για ολους τους αριθμους Ν(εβρισκε δηλαδη ΕΠ ΑΚΡΙΒΩΣ απο πόσα ψηφια αποτελειται ο Ν!) απο το 1 εως το 6561101970382(για τους πρωτους περιπου 6.5 τρισεκατομμυρια φυσικους αριθμους!!), δηλαδη εβρισκε ΕΠ ΑΚΡΙΒΩΣ απο πόσα ψηφια αποτελουνται ολοι οι αριθμοι 1!, 2!, 3!,..., 6561101970382! ενω για τον 6561101970383! αποτυγχανε! Μετα βεβαια για τον 6561101970384! και παλι εβρισκε επ ακριβως τον αριθμο των ψηφιων του, οπως και για τους επομενους πολλους πολλους αριθμους τα εβρισκε, εως και τον επομενο που αποτυγχανει(που ειναι της ταξης των 10^15 και που δεν τον εχουμε βρει ποιος ειναι ακομα). Ενα εντυπωσιακο "φαινομενο" θα μπορουσε να πει καποιος και που κανει καποια εντυπωση καθως το να βρεις εναν τυπο που προβλεπει το πόσα ψηφια θα εχει ο Ν! και ο τυπος να ισχυει για Ν=1 αλλά και 2 και 3 εως και τους 10000 πρωτους(τη ταξη και οχι πρωτους με την μαθηματικη εννοια) φυσικους αριθμους ειναι εκπληκτικο και ισως πεις(εαν δεν εχεις μαθηματικη εμπειρια) οτι ο τυπος ισχυει για ολους τους αριθμους. Πόσο μαλλον ενα προχωρησεις και μετα απο μηνες υπολογισμων βρεις οτι ο τυπος σου ισχυει για ΟΛΟΥΣ τους πρωτους(τη ταξη) 6.5 τρισεκατομμυρια φυσικους αριθμους!! Πλεον(καποιος απειρος περι αυτων) θα μπορουσε να ισχυριστει με σιγουρια οτι ισχυει για καθε φυσικο αριθμο! Ομως οπως βλεπουμε και απο αυτο το παραδειγμα, υπαρχει καποιος αριθμος, ο 6561101970383 φυσικος αριθμος, που σπαει τον τυπο σου! Παραδειγματα σαν και αυτο στα μαθηματικα υπαρχουν αφθονα(το πιο γνωστο: Skewes' number) οπου ενας τυπος δουλευει για ολους τους φυσικους αριθμους εως και καποιον τεραστιο αριθμο και μετα ξαφνικα βρισκεται καποιος αριθμος που σπαει την συμμετρια και τα καταστρεφει ολα. Στην εικασια του Riemann εικαζεται οτι το πρωτο αντιπαραδειγμα, αν υπαρχει, θα βρισκεται πολυ πολυ πολυ πολυ μακρια απο τις υπαρχουσες δυνατοτητες των υπολογιστων και ειναι ασκοπο να ψαχνουμε αντιπαραδειγμα για αυτην. Τελοσπαντων οπως ειπα ο προηγουμενος καλυτερος τυπος για να βρισκουμε επ ακριβως τον αριθμο των ψηφιων του Ν! δουλευει για ολους τους αριθμους Ν απο το 1 εως το 6561101970382. Ο βελτιωμενος τυπος που δωθηκε πιο πανω ομως δουλευει και για το 6561101970383! και για τους επομενους αριθμους ως το 10^15 καθως και εικαζεται οτι δουλευει για αριθμους Ν της ταξης 10^30(για αριθμους δηλαδη της ταξης (10^30)!, 10^30 ΠΑΡΑΓΟΝΤΙΚΟ δηλαδη!!) και δεν εχουμε φυσικα ανακαλυψει κανενα αντιπαραδειγμα, ενω βεβαια ειναι σαφες οτι υπαρχει αυτο. Με τον παραπανω τυπο λοιπον αν θεσουμε Ν = 12 παιρνουμε το αποτελεσμα 9. Και προφανως αφου ισχυει 12! = 479 001 600 Ενω αν θεσουμε Ν = 78 456 689 παιρνουμε το αποτελεσμα 585 313 227 Δηλαδη ο αριθμος 78 456 689! εχει 585 313 227 ψηφια. Θετοντας Ν = 6561101970383 (τον αριθμο που ο προηγουμενος τυπος αποτυγχανε) παιρνουμε αποτελεσμα 81244041273654. Δηλαδη ο αριθμος 6561101970383! εχει 81 244 041 273 654 ψηφια(81 τρισεκατομμυρια). Ο προηγουμενος σωστος τυπος που ξεραμε εδινε οτι εχει 81 244 041 273 653 ψηφια, δηλαδη ενα μολις λιγοτερο. Μπορει να φαινεται ασημαντο αλλά το λαθος ειναι λαθος. 5
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα