def unites(n): return n % 10 def dizaines(n): return unites(n // 10) def extrait(n, p): while (p != 1): n //= 10 p -= 1 return unites(n) def nbChiffres(n): if n == 0 : return 1 nb = 0 while n != 0 : nb += 1 n //= 10 return nb def sommeChiffres(n): somme = 0 while n != 0 : somme += unites(n) n //= 10 return somme def sommeDiviseursStrict(n): somme = 0 for i in range (1, n): if n % i == 0 : somme += i return somme def sontAmis(a, b): return sommeDiviseursStrict(a) == b and sommeDiviseursStrict(b) == a def estParfait(a): return sommeDiviseursStrict(a) == a def sommeParties(n, p): gauche = n droite = 0 while p != 0 : gauche //= 10 droite = 10*droite + extrait(n, p) p -= 1 return droite + gauche def estKaprekar(n): carre = n ** 2 for i in range(1, nbChiffres(carre)): if n == sommeParties(carre, i): return True return False