Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α16.22 · Εαυτοί Αριθμοί

Online τελική εξέταση Δεκεμβρίου 2023, Εξέταση #12, Θέμα 4 · Δυσκολία ★★☆ · programming · Κεφάλαια: 16, 10

Πρόγραμμα: self.c

Στην θεωρία αριθμών, ένας φυσικός αριθμός \(n\) λέγεται εαυτός (self) όταν δεν υπάρχει κάποιος φυσικός αριθμός \(m\), έτσι ώστε το \(n\) να ισούται με το άθροισμα του \(m\) και των ψηφίων του \(m\) (με βάση το 10 σε αυτό το θέμα). Έστω \(F(n)\) η συνάρτηση που υπολογίζει το άθροισμα ενός φυσικού \(n\) και των ψηφίων του. Τότε ένας αριθμός \(n\) είναι εαυτός αν και μόνο αν \(\nexists m . F(m) = n\). Για παράδειγμα, \(F(15) = 15 + 1 + 5 = 21\) και επομένως ο αριθμός 21 δεν είναι εαυτός. Αντίθετα, ο αριθμός 20 είναι εαυτός καθώς δεν υπάρχει φυσικός αριθμός m έτσι ώστε \(F(m) = 20\). Υπάρχουν μόλις 13 εαυτοί αριθμοί μικρότεροι του 100:

\[1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97\]

Γράψτε ένα πρόγραμμα C το οποίο βρίσκει και τυπώνει όλους τους εαυτούς αριθμούς σε ένα εύρος φυσικών αριθμών \([low, high]\) (το εύρος είναι κλειστό, δηλαδή τα άκρα συμπεριλαμβάνονται), όπου οι αριθμοί δίνονται από την γραμμή εντολών. Ακολουθεί παράδειγμα εκτέλεσης για να βρούμε όλους τους εαυτούς αριθμούς στο διάστημα \([9900, 10000]\):

$ gcc -o self self.c
$ ./self 9900 10000
Self numbers: 9903 9914 9925 9927 9938 9949 9960 9971 9982 9993
Found 10 total

Υπόδειξη

Γράψτε τη συνάρτηση F(m) με άθροισμα ψηφίων. Αντί να ψάχνετε για κάθε n ένα m, σημαδέψτε σε έναν πίνακα όλες τις τιμές F(m) που πέφτουν στο [low, high]· αρκεί να δοκιμάσετε m λίγο μικρότερα από το low (το άθροισμα ψηφίων είναι μικρό). Ελέγξτε ότι low ≤ high.

Αριθμός στον οδηγό: Α16.22 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: exam-2023-fall-ex12-q4 · Σύνδεσμος: https://progintro.github.io/study/questions/exams/exam-2023-fall-ex12-q4.html · Markdown (GitHub)