Πέμπτη 1 Ιουλίου 2010

Τα Υπόλοιπα

Μπορείτε να βρείτε τα υπόλοιπα των διαιρέσεων του ανωτέρω αριθμού, με 
το 3 και με το 9 αντίστοιχα, χωρίς να χρησιμοποιήσετε αριθμομηχανή;
(Κατ27/Πρβ. Νο.156)

7 σχόλια:

Δημήτρης Σκυριανόγλου είπε...

Με το 3 το υπόλοιπο είναι 2 ενώ με το 9 το υπόλοιπο είναι 5.

Η απάντηση βρίσκεται χρησιμοποιώντας τον κανόνα ότι ένας αριθμός διαιρείται με το 3 ή το 9 όταν αντίστοιχα το άθροισμα των ψηφίων του διαιρείται με το 3 ή το 9.
Ο αριθμός 5.555.555.555 έχει άθροισμα ψηφίων 50. Για να διαιρείται με το 3 θα έπρεπε να έχει άθροισμα 51 ή 48, δηλ να ήταν ο
5.555.555.556 ή 5.555.555.553, άρα με τον 5.555.555.555 η διαίρεση με 3 αφήνει υπόλοιπο 2.
Ομοίως για το 9 οι πλησιέστερος ακέραιοι που διαιρούνται με το 9 είναι οι 5.555.555.559 και 5.555.555.550. Άρα για τον 5.555.555.555 η διαίρεση με το 9 αφήνει υπόλοιπο 5.

Γενικά ο κανόνας που ισχύει είναι: Ένας αριθμός γραμμένος στο Ν-αδικό σύστημα διαιρείται με τον αριθμό Ν-1 αν το άθροισμα των ψηφίων του αριθμού στο Ν-αδικό σύστημα διαιρούνται με το Ν-1. Έτσι στο 10-δικό σύστημα (Ν) οι αριθμοί διαιρούνται με το 9 (Ν-1) όταν το άθροισμα των ψηφίων τους διαιρείται με το 9 (Ν-1).

Η πρώτη άσκηση που μας έβαλαν στον μάθημα Εισαγωγή στον προγραμματισμό στο 1ο έτος στο πανεπιστήμιο ήταν να χρησιμοποιήσουμε αυτόν τον κανόνα ώστε να ελέγξουμε αν ένας ακέραιος αριθμός Α διαιρείται ακριβώς με έναν ακέραιο αριθμό Β χωρίς όμως να εκτελέσουμε καμία διαίρεση με τον αριθμό Β. Να ένα ενδιαφέρον πρόβλημα :-)

Papaveri είπε...

@Δημήτρης Σκυριανόγλου
Πολύ σωστή και τεκμηριωμένη η λύση.
Τη προηγούμενη ανάρτηση μου φαίνεται πως δεν θα τη λύση κανένας. Θα την αφήσω και σήμερα και αύριο θα αναρτήσω τη λύση.

Emmanuel Manolas είπε...

@Δημήτρης Σκυριανόγλου
Σχεδόν μας το μαρτύρησες. Μετατρέπουμε τον Α του δεκαδικού σε αριθμό του (Β+1)δικού συτήματος, αθροίζουμε τα ψηφία και ελέγχουμε αν βρήκαμε Β.

Δημήτρης Σκυριανόγλου είπε...

@alkinoos
Η ιδέα φυσικά είναι σωστή, η πλήρης όμως λύση είναι λίγο πιο περίπλοκη και πιο ενδιαφέρουσα:

Μετά τη μετατροπή των ψηφίων του Α στο (Β+1)δικο σύστημα (ενδιαφέρουσα άσκηση για χρήση των τελεστών div και mod :-)) και την άθροισή τους (S) υπάρχουν τρία ενδεχόμενα:

S = B (οπότε ο Α διαιρείται από το Β)
S < B (οπότε, χωρίς να χρειαστεί διαίρεση ξέρουμε ότι ο Α δε διαιρείται από το Β αφού ο Β δε διαιρεί το S)
S > B (η πιο ενδιαφέρουσα περίπτωση. Τι γίνεται τότε? Πώς μπορούμε να ξέρουμε αν ο Β διαιρεί τον S και συνεπώς και τον Α?). Νομίζω ότι η απάντηση είναι εύκολη αλλά θα το αφήσω αν κάποιος αναγνώστης του ιστολογίου επιθυμεί να "παιδευτεί" λιγάκι :-))

@papaveri
Δε μου είναι κατανοητό το ζητούμενο στην προηγούμενη ανάρτηση. Τι ψάχνουμε να βρούμε? Τι σημαίνει "διαφορετικά εισιτήρια"? Αν εννοούμε διαφορετικούς προορισμούς τότε, αφού ανάμεσα στον Α και το Β υπάρχουν 25 ενδιάμεσοι σταθμοί, κάποιος από το σταθμό Α με κατεύθυνση το σταθμό Β μπορεί να ζητήσει 26 διαφορετικά εισιτήρια ένα για κάθε ενδιάμεσο σταθμό (σύνολο 25) και ένα για το Β.

Papaveri είπε...

@Δημήτρης Σκυριανόγλου
Για τη σχετική απορία βλέπε αναρτημένη λύση.

Δημήτρης Σκυριανόγλου είπε...

Δε βλέπω "κίνηση" στο υπο-πρόβλημα που έθεσα οπότε το "παίρνει το ποτάμι"

Αν το άθροισμα των ψηφίων του Α στο (Β+1)δικό σύστημα είναι μεγαλύτερο από Β, τότε για να εξεταστεί αν το άθροισμα αυτό διαιρείται ακριβώς με το Β χωρίς όμως να γίνει η διαίρεση, τότε απλά ακολουθείται η ίδια διαδικασία για το άθροισμα! (δηλ. μετατρέπεται κι αυτό σε αριθμό του (Β+1)δικού συστήματος και αθροίζονται τα ψηφία του. Η διαδικασία αυτή συνεχίζεται μέχρις ότου το άθροισμα των ψηφίων να είναι μικρότερο ή ίσο με το Β (αν είναι μικρότερο σημαίνει ότι το τελευταίο άθροισμα και, συνεπώς, κι όλα τα προηγούμενα αλλά και ο αρχικός αριθμός Α δε διαιρούνται με το Β, ενώ αν είναι ίσιο με Β τότε το τελευταίο άθροισμα και συνεπώς όλα τα προηγούμενα αλλά και ο Α διαιρούνται με το Β.

Το δίνω με τη μορφή αλγορίθμου:
(θεωρώ Α, Β φυσικούς, αν πρόκειται για ακεραίους τότε απλά ο αλγόριθμος θα χρησιμοποιήσει τις απόλυτες τιμές τους)

Διαίρεση
Α, Β φυσικοί

Αρχή

Διάβασε Α
Διάβασε Β
S <- A

Όσο S > B επανάλαβε
S <- Άθροισμα του S στο (Β+1)δικό σύστημα
Τέλος_Επανάληψης

Αν S = B τότε
Τύπωσε "Ο Β διαιρεί τον Α"
Αλλιώς
Τύπωσε "Ο Β δε διαιρεί τον Α"
Τέλος_Αν

Τέλος


Κάποιο ενδιαφέρον παρουσιάζει η μετατροπή ενός αριθμού στο (Β+1)δικό σύστημα και η άθροιση των ψηφίων του. Αυτό γίνεται με χρήση των τελεστών div και mod που υπολογίζουν αντίστοιχα το ακέραιο πηλίκο και υπόλοιπο της διαίρεσης δύο ακεραίων αριθμών.

Ο αλγόριθμος έχει ως εξής:

Μετατροπή Α, Ν
!Υπολογίζει το άθροισμα των ψηφίων του Α στο Ν-δικό σύστημα
S ακέραιος

Αρχή

S <- 0

Επανάλαβε
S <- S + A mod N
A <- A div N
Μέχρις_ότου Α=0

Τύπωσε "Το άθροισμα των ψηφίων είναι", S

Τέλος

Σε κάθε βήμα της επανάληψης υπολογίζεται το πιο δεξί ψηφίο του αριθμού (με τον τελεστή mod) ενώ με τον τελεστή div "αποκόβεται" κατόπιν το πιο δεξί ψηφίο του Α και προχωράει η διαδικασία στο επόμενη στην τάξη ψηφίο. Ελπίζω να ήμουν κατανοητός :-)

Δημήτρης Σκυριανόγλου είπε...

Δε βλέπω "κίνηση" στο υπο-πρόβλημα που έθεσα οπότε το "παίρνει το ποτάμι"

Αν το άθροισμα των ψηφίων του Α στο (Β+1)δικό σύστημα είναι μεγαλύτερο από Β, τότε για να εξεταστεί αν το άθροισμα αυτό διαιρείται ακριβώς με το Β χωρίς όμως να γίνει η διαίρεση, τότε απλά ακολουθείται η ίδια διαδικασία για το άθροισμα! (δηλ. μετατρέπεται κι αυτό σε αριθμό του (Β+1)δικού συστήματος και αθροίζονται τα ψηφία του. Η διαδικασία αυτή συνεχίζεται μέχρις ότου το άθροισμα των ψηφίων να είναι μικρότερο ή ίσο με το Β (αν είναι μικρότερο σημαίνει ότι το τελευταίο άθροισμα και, συνεπώς, κι όλα τα προηγούμενα αλλά και ο αρχικός αριθμός Α δε διαιρούνται με το Β, ενώ αν είναι ίσιο με Β τότε το τελευταίο άθροισμα και συνεπώς όλα τα προηγούμενα αλλά και ο Α διαιρούνται με το Β.

Το δίνω με τη μορφή αλγορίθμου:
(θεωρώ Α, Β φυσικούς, αν πρόκειται για ακεραίους τότε απλά ο αλγόριθμος θα χρησιμοποιήσει τις απόλυτες τιμές τους)

Διαίρεση
Α, Β φυσικοί

Αρχή

Διάβασε Α
Διάβασε Β
S <- A

Όσο S > B επανάλαβε
S <- Άθροισμα του S στο (Β+1)δικό σύστημα
Τέλος_Επανάληψης

Αν S = B τότε
Τύπωσε "Ο Β διαιρεί τον Α"
Αλλιώς
Τύπωσε "Ο Β δε διαιρεί τον Α"
Τέλος_Αν

Τέλος

 

Papaveri48 © 2010

PSD to Blogger Templates by OOruc & PSDTheme by PSDThemes