Ευτυχής αριθμός

Στα μαθηματικά, ευτυχής αριθμός είναι κάθε φυσικός αριθμός ο οποίος καταλήγει στο 1 μετά από την ακόλουθη διαδικασία:  Ο αριθμός αντικαθίσταται διαδοχικά από το άθροισμα των τετραγώνων των ψηφίων του (στο δεκαδικό σύστημα).  

Γενικότερα, μπορεί να οριστεί ευτυχής αριθμός σε οποιοδήποτε σύστημα άλλο από το δεκαδικό, ακολουθώντας την ίδια διαδικασία.
 Παραδείγματα 
Για τον αριθμό 7
7² = 49 (παίρνουμε το 4 και το 9 και τα υψώνουμε στο τετράγωνο)
4² + 9² = 16 + 81 = 97 (παίρνουμε το 9 και το 7 και τα υψώνουμε στο τετράγωνο)
9² + 7² = 81 + 49 = 130 (παίρνουμε το 1, το 3 και το 9 και τα υψώνουμε στο τετράγωνο)
1² + 3² + 0² = 1 + 9 + 0 = 10 (παίρνουμε το 1 και το 0 και τα υψώνουμε στο τετράγωνο)
1² + 0² = 1 (κατέληξε σε 1, αρά είναι ευτυχής)
Για τον αριθμό 19
1² + 9² = 82
8² + 2² = 64 + 4 = 68
6² + 8² = 36 + 64 = 100
1² + 0² + 0² = 1 + 0 + 0 =  1

Για τον αριθμό 131
1² + 3² + 1² = 1 + 9 + 1 = 11
1² + 1² = 1 + 1 = 2
2² = 4 (κατέληξε σε 4, άρα είναι δυστυχής).Για την ακρίβεια ο κύκλος είναι .

 Λίστα ευτυχών αριθμών 

Οι 143 ευτυχείς αριθμοί από το 1 - 1.000 είναι: 
1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100, 103, 109, 129, 130, 133, 139, 167, 176, 188, 190, 192, 193, 203, 208, 219, 226, 230, 236, 239, 262, 263, 280, 291, 293, 301, 302, 310, 313, 319, 320, 326, 329, 331, 338, 356, 362, 365, 367, 368, 376, 379, 383, 386, 391, 392, 397, 404, 409, 440, 446, 464, 469, 478, 487, 490, 496, 536, 556, 563, 565, 566, 608, 617, 622, 623, 632, 635, 637, 638, 644, 649, 653, 655, 656, 665, 671, 673, 680, 683, 694, 700, 709, 716, 736, 739, 748, 761, 763, 784, 790, 793, 802, 806, 818, 820, 833, 836, 847, 860, 863, 874, 881, 888, 899, 901, 904, 907, 910, 912, 913, 921, 923, 931, 932, 937, 940, 946, 964, 970, 973, 989, 998, 1000

 Πρόγραμμα 
Το ακόλουθο πρόγραμμα σε Python μας απαντάει αν ένας αριθμός είναι ευτυχής ή δυστυχής και τυπώνει την ακολουθία των αριθμών που συναντήσαμε:

def isHappy(num):
   while num != 1 and num != 4:
      # Αθροίζουμε τα τετράγωνα των ψηφίων του num.
      next_num = 0
      while num > 0:
         digit = num % 10 # Βρίσκουμε το τελευταίο ψηφίο του num.
         next_num += digit * digit
         num //= 10 # Αφαιρούμε το ψηφίο από το num.

      print(f" -> {next_num}")
      num = next_num

   return num == 1

# Παραδείγματα:
isHappy(7)
isHappy(131)

Και παρακάτω είναι ο ισοδύναμος αναδρομικός κώδικας:

def isHappyRec(num):
   print(f" -> {num}")
   if num == 1:
      return True
   if num == 4:
      return False

   # Αθροίζουμε τα τετράγωνα των ψηφίων του num.
   next_num = 0
   while num > 0:
      digit = num % 10 # Βρίσκουμε το τελευταίο ψηφίο του num.
      next_num += digit * digit
      num //= 10 # Αφαιρούμε το ψηφίο από το num.

   return isHappyRec(next_num)

 Παραπομπές 

Κατηγορία:Ακολουθίες ακεραίων