! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
! Σύμφωνα με τη Θεωρία Αριθμών, κάθε θετικός ακέραιος αριθμός
! είναι δυνατόν να αναλυθεί σε άθροισμα τεσσάρων τετραγώνων. Ο
! παρακάτω αλγόριθμος βρίσκει αυτούς τους αριθμούς.
!
! Η βασική στρατηγική που χρησιμοποίησα την πρώτη φορά που
! προσπάθησα να λύσω το πρόβλημα, ήταν αυτή της διαδοχικής
! αφαίρεσης των μεγιστων δυνατών τετραγωνων, π.χ. το μεγιστο
! τετράγωνο του 19 είναι το 16=4^2, αφαιρούμε το 16 από το 19
! και επαναλαμβάνουμε την διαδικασία. Τελικα, με αυτή τη μέθοδο
! προκύπτει: 19 = 4^2 + 1^2 + 1^2 + 1^2. Όμως αυτή η μέθοδος
! δεν λειτουργεί για το 23, για το οποίο προκύπτει η εξής τετράδα:
! 4^2 + 2^2 + 1^2 + 1^2 = 22. Τί γίνεται σε αυτήν την περίπτωση;
! Με δοκιμές ανακάλυψα πως κάποιος από τους μεγαλύτερους
! αριθμούς της τετράδας πρέπει να μειωθει, ούτως ώστε να μπορεί
! να "χωρέσει" κάποιο άλλο τετράγωνο μέσα στο 23 και να γίνει το
! άθροισμα ακριβώς 23. Τελικά προέκυψε ένα μεγάλο πρόγραμμα με
! πολλούς ελέγχους, γι αυτό σας το στέλνω, αν μπορείτε να το
! απλοποιήσετε...
! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
ΠΡΟΓΡΑΜΜΑ τέσσερα_τετράγωνα
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: n, a, b, c, d, e
ΧΑΡΑΚΤΗΡΕΣ: decide
ΑΡΧΗ
decide <-- 'y'
ΟΣΟ (decide = 'y') ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'δώσε θετικό ακέραιο n'
ΔΙΑΒΑΣΕ n
ΟΣΟ (n > Α_Μ(n)) ή (n < 0) ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'λανθασμένη εισαγωγή δεδομένων'
ΓΡΑΨΕ 'δώσε θετικό ακέραιο n'
ΔΙΑΒΑΣΕ n
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'ακολουθεί η ανάλυση του αριθμού σε τέσσερα τετράγωνα'
a <-- Α_Μ(Τ_Ρ(n))
e <-- n - a*a
b <-- Α_Μ(Τ_Ρ(e))
e <-- e - b*b
c <-- Α_Μ(Τ_Ρ(e))
e <-- e - c*c
d <-- Α_Μ(Τ_Ρ(e))
ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
c <-- c - 1
e <-- n - a*a - b*b - c*c
d <-- Α_Μ(Τ_Ρ(e))
ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n) ή (c = 0)
ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
b <-- b - 1
e <-- n - a*a - b*b
c <-- Α_Μ(Τ_Ρ(e))
e <-- e - c*c
d <-- Α_Μ(Τ_Ρ(e))
ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n) ή (b = 0)
ΑΝ (a*a + b*b + c*c + d*d < n) ΤΟΤΕ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
a <-- a - 1
e <-- n - a*a
b <-- Α_Μ(Τ_Ρ(e))
e <-- e - b*b
c <-- Α_Μ(Τ_Ρ(e))
e <-- e - c*c
d <-- Α_Μ(Τ_Ρ(e))
ΜΕΧΡΙΣ_ΟΤΟΥ (a*a + b*b + c*c + d*d = n)
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ n, ' = ', a, '^2 + ', b, '^2 + ', c, '^2 + ', d, '^2'
ΓΡΑΨΕ 'για να ξαναδοκιμάσετε, πατήστε το "y"'
ΔΙΑΒΑΣΕ decide
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ τέσσερα_τετράγωνα