Poster un nouveau sujet Poster une réponse
FACTEURS avec du RECURSIF
Auteur Message
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 19 Nov 2011, 21:57   Citer 

Ce sujet est l'aboutissement de celui-ci : https://tout82.pages-perso.free.fr/forum/sujet.php?message=35205#35205
Merci à chr4 qui a posé la question à l'origine de mon travail.


FACT_4.83p
FACTZ_4.2.83p dépendant de FACT_4

Ces programmes permettent ensemble de trouver tous les facteurs entiers positifs quelconques dont le produit vaut un nombre fixé.
(Cela peut servir à craquer certains codes...)

X= F1*F2*...*FN
A <= F <=B

Vous choisissez X et N sachant que F est toujours différent de 1.
A et B désigneront l'intervalle de recherche.

Le choix de N est tout l'intérêt de mon programme.
Sinon vous aurez besoin :
- d'alternatives à n'en plus finir
- des boucles à n'en plus finir

EDIT 23/01/2014 : ou bien une autre technique bien plus tordue à élaborer
https://tout82.pages-perso.free.fr/forum/sujet.php?sujet=3890


Ils sont TRES PUISSANTS. Bien plus que tout autre programme crible en Ti-Basic. Le secret de cette puissance tient dans la RECURSIVITE !!!


-version 2.0 : fonctionne tout simplement
-version 2.2 : quelques astuces
-version 4.1 : gain de temps exponentiel avec une table de diviseurs. Réglé quelques semaines après v2.2 mais timidement gardée vu l'intérêt de l'époque.
-version 4.2 : ommet les combinaisons équivalentes du genre 2*3=3*2. Réglé Hier avec une idée soudaine et pourtant simple.


La récursivité ne vous inspire peut-être rien mais je vous assure que c'est génialissime.
Comparez donc avec le programme de chr4 dans le sujet énoncé au tout début.
Si un jour j'y trouve un autre usage je ferai peut-être un tutoriel spécialisé pour TI.


==== codes :

Code
FACT_4
----

Prompt X,N,A,B
max(A,2->A
min(B,X->B
{0->L2
DelVar C
For(I,1,rac(X
If not(fPart(X/I
Then
C+2->C
I->L2(C-1
X/I->L2(C
End
End
SortA(L2
1+sum(L2<A->A
sum(L2<=B->B
DelVar J
ClrList L1
prgmFACTZ


Code
FACTZ_4.2
----

J+1->J
For(W,A,min(B,sum(L2<=X
J=N->Q
If Q
min(B,sum(L2<=X->W
L2(W->L1(J
fPart(X/L2(W->R
If Qnot(R
Then
L1->L3
SortA(L3
If prod(L1=L3
Pause L1
End
If not(Q+R
Then
X/L2(W->X
prgmFACTZ
J-1->J
sum(L2<=L1(J->W
XL1(J->X
End
End



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 19 Nov 2011, 22:12   Citer 

ça a l'air pas mal, mais :
-pourrais-tu expliquer ce qu'il faut mettre pour A et B?
-c'est que pour des entiers ou aussi des réels?

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 19 Nov 2011, 22:47   Citer 

F est un entier positif compris entre A et B.
Généralement on pose A=2 et B=X
(message précédent corrigé)

D'autre part je tenterai peut-être de commenter ce code comme la v2.2 mais j'hésite vu la complexité actuelle... et l'âge de certaines bribes de mon code.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Sam 19 Nov 2011, 22:55   Citer 

Merci, je teste

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 20 Nov 2011, 13:06   Citer 

Salut,

J'ai lu un peu le programme et le sujet précédent, mais n'ai pas compris clairement :
- Qu'est-ce que la récursivité?
- En quoi est-ce si puissant?

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 20 Nov 2011, 15:57   Citer 

Sans la récursivité, il te faut un programme par valeur de N.
Sans elle, il faut imbriquer des boucles dans des boucles et encore dans des boucles...


La récursivité fait la même chose avec un seul programme et une seule boucle.


Code
 // 4 facteurs
Prompt X
For(A,2,X
For(B,2,X
For(C,2,X
For(D,2,X
If ABCD=X
Pause {A,B,C,D}
End
End
End
End


Code
 // 25 facteurs
Prompt X
For(A,2,X
For(B,2,X
For(C,2,X
For(D,2,X
...
For(Z,2,X
If ABCD ... Z=X
Disp {A,B,C,D, ... ,Z}
End
...
End
End
End
End


Code
 // N facteurs , récursif
J+1->J
For(W,2,X
W->L1(J
If J=/=N et ...
prgmFACT // appelle le programme lui-même

If "FINI"
Pause L1
End
Return



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 20 Nov 2011, 18:00   Citer 

Hum, intéressant.

Et à part à faire une prouesse mathématique, ça sert à quoi de trouver le produit de N facteurs successifs qui te donnent X?

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
Persalteas



Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Dim 20 Nov 2011, 18:56   Citer 

Attends d'en avoir besoin et tu sauras.

Moi ça m'a servi plusieurs fois a des moments ou je m'y attendais pas.

Linkakro, tu es un Dieu des Maths. ou presque.

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes