Le nombre de solutions entières non négatives de x₁+⋯+x_k=n est C(n+k−1,k−1), pour n≥0 et k≥1. Représentez n étoiles identiques séparées en k boîtes nommées par k−1 barres ; des barres adjacentes et aux extrémités permettent des entrées nulles. Les boîtes sont distinguables, les objets ne le sont pas. Compter des jetons distincts attribuerait chacun indépendamment, donnant k^n avant autres contraintes. Choisissez le modèle selon ce que représentent les objets et les destinataires, et non selon la ressemblance d'un coefficient binomial familier.
Pour des affectations strictement positives x_i≥1, poser z_i=x_i−1 ; le total restant est n−k, donnant C(n−1,k−1) lorsque n≥k. Des bornes inférieures plus générales x_i≥a_i se traitent en soustrayant chaque a_i. Au moins un zéro est le complément de tous les termes positifs : soustraire C(n−1,k−1) du total non négatif. Les cas chevauchants, comme exactement deux boîtes vides, nécessitent un décompte différent ; soustraire chaque cas de boîte vide indépendamment double-compte leurs intersections.
Tracer un organigramme une instruction exécutée à la fois, en enregistrant les variables dans un tableau. Distinguer l'affectation d'un test d'égalité mathématique ; le côté droit d'une affectation utilise la valeur ancienne avant remplacement. Enregistrer quelle branche s'exécute ensuite et quelles variables sont remises à zéro. Un nouveau candidat de boucle extérieure peut remettre à zéro une somme intérieure sans remettre à zéro le candidat lui-même. Pour un processus qui ajoute 1,3,5,… à S depuis zéro, après m additions S=m² et le prochain addende est 2m+1.
Un invariant de boucle est vrai avant et après chaque itération. L'invariant de la somme de carrés vaut initialement à m=0 et est préservé car m²+(2m+1)=(m+1)². Un invariant seul ne prouve pas l'arrêt. Pour tester si un entier N≥0 est un carré en ajoutant des nombres impairs jusqu'à S≥N, S croît sans limite ; équivalentement, m augmente et doit atteindre une borne telle que N. À la sortie, l'égalité signifie carré et le dépassement signifie non-carré. Une valeur imprimée doit être atteinte sur un chemin d'exécution réel ; un motif numérique plausible seul ne constitue pas un traçage.