Basé sur cet article:
On connecte deux nombres entiers de la façon suivante: m=...a est un prédécesseur de n = b... si n-m = ab (= 10a+b). on dira aussi que n est un successeur de m.
Ainsi la séquence 1,12,35,94,135,186 est valide. En effet, 12-1 = 11, 35-12=23, ...
Un autre façon de voir cette séquence est que le nombre formé par les deux chiffres autour de la virgule (comma en anglais) est la différence des deux nombres autour de la virgule.
1 (11) 12 (23) 35 (59) 94 (41) 135 (51) 186
A la différence de l'article ci-dessus, j'étends la définition aux nombres entiers en ne tenant pas compte du signe. Ainsi la séquence -65, -14, 28, 109 est valide.
Il y a parfois plusieurs successeurs possibles. Ainsi 33 a comme successeurs 69 et 70. Ou pas du tout, comme 36 qui n'en a pas.
De même certains nombre on plusieurs prédécesseurs, comme 58 qui a -17 et 23. Ou pas du tout, comme 53 qui n'en a pas.
Il y a un seul nombre qui est sont propre successeur (et prédécesseur): 0. En effet 0 (00) 0 est une séquence valide.
Toutes les autres séquences sont croissantes. En effet, aucun autre nombre ne commence par 0.
A propos de 0, la séquence -4 (44) 40 (04) 44 (49) 93 est valide. Même si (04) commence par 0.
En reliant tous les nombres entiers, on obtient une série de graphes orientés disjoints.
Combien y a-t-il de graphes disjoints parmi tous les nombres entiers?
Donnez un représentant (par exemple celui dont la valeur absolue est la plus petite) de chaque graphe.
Bon amusement
Merci pour le message, l'article est intéressant.
Une remarque sur 0 : tous les nombres positifs à un chiffre sont des successeurs de 0 qui est leur unique prédécesseur.
La question que tu poses me semble difficile.
En effet, 0 est l'unique prédécesseur de tous les chiffres de 0 à 9.
Il y a moyen de montrer (c'est fait dans l'article) qu'il y a un nombre limité de nombre positifs qui n'ont pas de prédécesseur. Si on peut étendre cela aux nombres négatif et tenant compte que la différence entre deux nombres dans une séquence est entre 0 et 100, on pourrait montrer que le nombre de graphes est limité.
D'après mes expériences, tous les nombres négatifs ont exactement un prédécesseur. Donc le nombre de graphes disjoints devrait être inférieur à 100.
Il me semble, mais j'ai un peu de fièvre ce qui rend mes résultats douteux, que tous les nombres strictement négatifs ont un unique prédécesseur et un unique successeur.
Ça supprime des nombres sans prédécesseur de la liste, mais il reste tous les nombres de la forme c*10k où c est un chiffre entre 2 et 9 (théorème 5.4). Il faudrait démontrer que, parmi leurs nombreux successeurs, certains rejoignent un autre chemin.
Je suis d'accord avec toi, les nombres négatifs ont un unique prédécesseur et un unique successeur. Il faudrait le prouver
0 est spécial car il boucle sur lui-même et est le seul à avoir plus de 2 successeurs.
Pour les nombres de la forme c*10^k, j'ai mal utilisé mes termes. Dans l'article un successeur est le plus petit des enfants (child), ici j'appelle tous les enfants successeurs. Il faut donc regarder le théorème 5.5. Où il n'y a que 50 nombres sans parent (sans prédécesseur). On peut réduire cette liste car j'ai étendu la définition aux nombres négatifs et 0.
En effet j'ai mal lu.
Et la liste des nombres sans parent est considérablement réduite, mais pas vidée.
Une démonstration pour : un nombre négatif a un unique parent.
Soit avec et un chiffre non nul
On cherche un nombre tel que et un chiffre.
L'égalité se réécrit facilement
On en déduit
D'où
Comme il y a une possibilité unique pour et donc pour .
CQFD
Cette preuve s'adapte aux enfants, mais il me reste quelques détails à régler quand on change le nombre de chiffres et quand l'enfant est positif.
Finalement ça ne marche pas bien :
— il y a des négatifs qui n'ont pas d'enfants -11 ; -33 ; -55 ; -77 et -99
— il y a des négatifs qui ont deux enfants -2 ; -3 ; -4 ; -5 ; -6 ; -7 ; -8 et -9.
En effet j'ai dû faire une erreur dans mon code. En le réécrivant, je n'ai plus le même résultat
Il y a exactement 20 nombres sans prédécesseur et ils sont tous positifs:
Bonsoir,
on en est au même point.
À propos de programme je ne comprends pas ce que fait yield et je n'aime pas les fonctions sans return.
Je donne mon code qui est volontairement non optimisé
def premch(n): # retourne le premier chiffre
return int(str(abs(n))[0])
def derch(n):# retourne le dernier chiffre
return abs(n)%10
def suc(n): # l est la liste des enfants de n
l=[]
a=derch(n)
m=n+10*a
for b in range(1,10):
k=m+b
if premch(k)==b :
l.append(k)
return l
def pred(m): # l est la liste des parents de m
l=[]
b=premch(m)
n=m-b
for a in range(0,10):
k=n-10*a
if derch(k)==a:
l.append(k)
return l
On a un code très similaire. Les yields ne sont clairement pas nécessaire ici.
Au lieu de transformer n en str, je divise par 10 jusqu'à avoir un seul chiffre.
Et les yields, l'idée c'est de retourner les résultats dès qu'ils sont disponibles au lieu d'attendre la fin de la fonction et de les retourner dans une liste. Mais comme je les accumule dans une liste de toute façon, ça ne change rien.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :