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
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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 19 Nov 2011, 22:47
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)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 20 Nov 2011, 15:57
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)