Bonjour à tous,
Vous connaissez tous (j'espère) le PPCM (plus petit commun multiple) entre deux nombres entiers.
Je vous propose de chercher, pour tous les nombres à 2 chiffres (soit de 10 à 99) que nous appellerons A et B, les triplets (A; B; PPCM(A,B)) qui s'écrivent avec des chiffres tous différents et consécutifs.
La notion de "consécutif" est appliquée de façon "large", c'est à dire qu'on peut les retrouver dans la suite infinie ....01234567890123456789012345678901234....
Pour être le plus clair possible, voici des exemples de suites de chiffres consécutifs :
123456789
7890123
45678901
Par exemple, PPCM(12;59)=708 donc le triplet s'écrira (12;59;708), ce qui nous donne la suite 0125789.
Les chiffres sont bien tous différents, mais pas consécutifs.
La question est donc : existe-t-il des triplets tels que définis ci-dessus et si oui, lesquels ?
Bonjour lehardi,
Je dirais qu'il n'y a pas de solution.
Voici un petit programme qui le montre (sauf erreur de ma part) écrit en CamL, si tu ne connais pas ce langage, et bien cela ressemble à d'autres, tu devrais t'y retrouver :
let rec pgcd a b = if b>a then pgcd b a else begin
if b=0 then a else pgcd b (a mod b) end;;
let ppcm a b = (a*b)/(pgcd a b) ;;
let find () = let L=ref [] and (a,c,d,u)=(ref 0, ref 0, ref 0, ref 0) and m=ref 0 in
for i=0 to 9 do
m:=ppcm (10*i+((i+1) mod 10)) (10*((i+2) mod 10)+((i+3) mod 10)) ;
a:= !m/1000 ;
c:= (!m/1000)/100 ;
d:= (!m mod 100)/10 ;
u:= (!m mod 10) ;
if !a = 0 then
if !c = 0 then
if !d= (i+4) mod 10 then
if !u= (i+5)mod 10 then L:= i:: !L
else ()
else ()
else if !c= (i+4) mod 10 then
if !d=(i+5) mod 10 then
if !u=(i+6) mod 10 then L:= i:: !L
else ()
else ()
else ()
else if !a= (i+4) mod 10 then
if !c= (i+5) mod 10 then
if !d= (i+6) mod 10 then
if !u= (i+7) mod 10 then L:= i:: !L
else ()
else ()
else ()
else ()
done;
!L;;
find ();;
Si quelqu'un aperçoit une coquille qui se serait glisser dans ces lignes, qu'il m'en fasse part Merci.
Bonjour Noflah,
Je pense que tu n'as pas bien compris l'énoncé (mais peut-être n'est-il pas clair ?)
Il y a plus de 10 cas possibles.
Re bonjour godefroy_lehardi, et bonjour Noflah,
j'ai programmé ce problème et si je n'ai pas fait d'erreur de programmation, il me semble bien qu'il n'y ait pas de solution...
Je vais essayer de confirmer cela par excel...
Je pense avoir compris,
tu veux que ton triplet s'écrivent : i(i+1),(i+2)(i+3),...
Par exemple : 12 34 ...
Il n'y a donc que 10 cas à voir :
12 34 204
23 45 1035
34 56 952
45 67 3015
56 78 2184
67 89 5963
78 90 1170
89 01 89
90 12 180
01 23 23
Aucun ne convient.
Désolé, je me suis mal exprimé alors.
Une fois qu'on a un triplet, on prend tous les chiffres qui le composent et on les met dans l'ordre.
Le triplet répond à l'énoncé si tous les chiffres sont différents et se suivent comme indiqué dans l'énoncé.
Mais dans le triplets, tu met les 2 nombres puis le ppcm, donc forcement si ton premier nombre est 12 il faut au moins que le deuxième nombre soit 34. Et il eut fallu que leur ppcm soit 567 par exemple. non ?
Non, les chiffres n'ont pas besoin d'être déjà dans l'ordre.
Relis mon exemple.
Ca me rappelle cet humoriste canadien (dont j'ai oublié le nom) qui disait :
"Quand tu donnes ton numéro de téléphone, ça fait plus propre si tu remets d'abord les chiffres dans l'ordre... mais personne ne te rappelle jamais."
Ok j'avais pas lu entre les deux...
J'ai mal lu l'énoncé...
Je propose donc "toutes mes excuses" et me repenche sur le problème...
Oui voilà, moi pareil ^^ Aller on y va.
Dis moi totti, tu te souviens si c'est le tri fusion ou le tri rapide qui est le plus efficace lorsque la liste a trier n'est pas longue ?
Voici :
(*Le tri rapide *)
let rec partition L e= match L with
| [] -> [],[]
| [a] -> if a<e then [a],[] else [],[a]
| a::L -> let (c,d)=partition L e in
if a<e then (a::c,d)
else (c,a::d) ;;
partition [5;4;2;8;7;7;1];;
let rec tri_rapide L = match L with
| [] -> []
| [a] -> [a]
| a::L -> let (c,d)=partition L a in
tri_rapide(c) @ (a:tri_rapide d)) ;;
tri_rapide [5;4;2;8;7;7;1];;
tri_rapide [9;8;7;6;5;4;3;2;1;0];;
let check L = let k=ref (tl L) and c=ref (hd L) and b=ref true in
for i=1 to (list_length L)-1 do
if !c+1=hd !k then (c:= !c+1 ; k:= tl !k) else b:=false done;
!b;;
check [1;2;3;4;5;6];;
let find2 () = let L=ref [] and (a,b,e,f,m,c,d,u,p)=(ref 0,ref 0,ref 0,ref 0,ref 0,ref 0,ref 0,ref 0,ref 0) in
for i=10 to 98 do
a:=i/10 ; b:= i mod 10 ;
for j=i to 99 do
e:=j/10 ; f:= j mod 10 ;
p:=ppcm i j ;
m:= !p/1000 ;
c:= (!p/1000)/100 ;
d:= (!p mod 100)/10 ;
u:= (!p mod 10) ;
if !m = 0 then
if !c = 0 then
if check(tri_rapide [!a;!b;!e;!f;!d;!u]) then L:= (i,j):: !L
else ()
else if check(tri_rapide [!a;!b;!e;!f;!c;!d;!u]) then L:= (i,j):: !L
else ()
else if check(tri_rapide [!a;!b;!e;!f;!m;!c;!d;!u]) then L:= (i,j):: !L
else ()
done; done;
!L;;
find2 ();;
Et les solutions : [54, 63; 36, 57; 35, 42; 34, 51; 16, 54; 14, 36; 13, 54]
ce qui signifie que 54,63 et leur ppcm marchent / 36 et 57 idem / 35 et 42 / etc
En effet :
ppcm(54,63)=378 et en remettant dans l'ordre on a bien 3,4,5,6,7,8
Par contre on a 2 fois le 3 ... Il aurait du le voir ! Je vais lui taper dessus et je reviens.
Je suis désolé Noflah, mais toutes tes réponses ont le même défaut : il y a un chiffre qui se répète.
Au fait, pensez à blanker
C'est bon j'ai trouvé le problème et j'ai corrigé une autre erreur : je n'avais pas pris en compte le coup de la suite cyclique, après 9 on revient à 0.
D'ailleurs pour le coup, l'énigme me paraissait trop simple au départ, mais maintenant avec le bon énoncé, c'était assez drôle. Donc merci pour l'énigme lehardi
je pense savoir quelle type de solution il me manque...
Celles du type 7890123 où on a un zero en plein milieu, car une fois trié cela donne 0123789 d'où la peut-etre ambiguité...
totti -> personnellement j'ai travaillé avec des listes, donc le logiciel ne fait pas de simplification du genre 01=1.
De plus j'ai différencier les cas où le ppcm à 2,3 ou 4 chiffres.
Je serais curieux de voir ou est mon erreur ...
Effectivement je ne vois pas non plus...
Elle aurait peut-être fait mal celle-ci en officielle...
Merci godefroy pour cette enigmhardy !!!
D'ailleurs dans les enigmes ardues, jamo ne devrait pas tarder à corriger la 214...
Je viens de lire les réponses de Noflah et totti1000 et je ne trouve comme eux que 4 couples solution à permutation près : quel est le 5ème ? Je n'ai pas le courage de le chercher !
Bonjour Rodolphe,
Mon ordinateur a eu lui le courage de chercher, et cela sans succès, c'est donc mon programme qui est faux quelque part, je pense donc que c'est un problème de logique auquel nous faisons face tous les 3, il y a une éventualité que nous ne soupçonnons pas ...
Salut Noflah,
J'ai du mal à imaginer un 5ème couple car j'ai sorti tous les doublons et il m'en manquerait deux dans ces conditions ! Ou alors, on ne cherche pas où il faut !
"Ou alors, on ne cherche pas où il faut !"
Voilà c'est ce que je pense ! Je suis un peu d'accord avec totti sur le fait qu'un quelconque 0 nous aurait mis à mal !
D'ailleurs j'y pense, voilà l'erreur de mon algo ! Je corrige et je reviens !
Bonsoir à tous :
Noflah
PPCM(21;87)=609 : les chiffres sont différents mais pas consécutifs ! 012....6789 : ça c'était ma première réaction mais ils sont bine consécutifs comme cela 6789012, ça marche !!!!! Effectivement, il y aurait eu pas mal de
Bravo à toi ! Merci godefroy_lehardi
J'aurais dû lire les exemples donnés par maître godefroy_lehardi : on avait la réponse sous les yeux !
Félicitations à tous les trois
Effectivement, il y avait un cas un peu tordu.
Mais vous en êtes venus à bout.
Rodolphe :
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :