Ακολουθία αριθμών Collatz
Το περίφημο πρόβλημα για το οποίο ο Paul Erdős δήλωσε πως "τα μαθηματικά δεν είναι έτοιμα για τέτοια προβλήματα".
Δίνεται ένας θετικός ακέραιος αριθμός a ως αρχική τιμή μιας ακολουθίας. Υπολογίζουμε τους όρους της ακολουθίας ως εξής:
Αν $$a_n$$ άρτιος τότε:
$$
a_{n+1} = a_{n}/2
$$
Αν $$a_n$$ περιττός τότε:
$$
a_{n+1} = 3a_{n}+1
$$
Οι τιμές της ακολουθίας, κάποια στιγμή, θα καταλήξουν στο 1. Από εκεί και μετά οι τιμές της επαναλαμβάνουν το μοτίβο 1,4,2,1 επ άπειρον. Να γραφεί ένα πρόγραμμα που να δέχεται μια αρχική τιμή (θετικό ακέραιο) και να υπολογίζει και τυπώνει τις τιμές της ακολουθίας μέχρι να βρεθεί η μονάδα.
/* Hailstone numbers - Collatz conjecture http://en.wikipedia.org/wiki/Collatz_conjecture http://mathworld.wolfram.com/CollatzProblem.html */ #include <iostream> using namespace std; int main() { int a, i = 0; cout << "Give me a positive integer: "; cin >> a; // stop if a <= 0 if ( a<=0 ) { cout << "I asked for a positive integer" << endl; cout << "Program terminates here" << endl; return 0; } // loop while a != 1 cout << "i" << "\t" << "a" << endl; cout << "--------------\n"; cout << i << "\t" << a << endl; while (a != 1) { if (a%2 == 0) { a = a/2; } else { a = 3*a + 1; } ++i; cout << i << "\t" << a << endl; } return 0; }
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.