Nbrs Factorielles

Résolu
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 - 22 sept. 2004 à 19:30
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 - 23 sept. 2004 à 19:21
Voila j'ai commencé à scripter quelques aliases pour faire des calculs avec les factorielles, si quelqu'un peut m'aider à optimiser un peu ça et/ou me donner des idées pour continuer ce que j'ai commencé, parceque là je bute un peu, merci d'avance.

alias fact1 { var %¨ 1, %! $1, %: 1, %:: $len($1)
  if $prop == op { while %&#168; <= %! { var %: $addtok(%:,$v1,120) | inc %&#168; } | return factorielle %! $+ ! = %: }
  elseif $prop == res { while %&#168; <= %! { var %: $calc(%&#168; * %:) | inc %&#168; } | return factorielle %! $+ ! = %: }
}
alias fact2 { var %&#168; 1, %! $1, %: 1, %:: $len($1)
  if $prop == op { while %&#168; <= %:: { var %: $+($addtok(%:,$mid($1,$v1,1),43),$chr(33)) | inc %&#168; } | return factorielle de %! = %: }
  elseif $prop == res { while %&#168; <= %:: { var %: $addtok(%:,$gettok($fact($mid($1,$v1,1)).res,4,32),$chr(43)) $+ $chr(43) | inc %&#168; } | return factorielle de %! = $calc(%:) }
} 
alias fact3 { var %&#168; 1, %: 1, %:: $1-, %ù $len($remove($1-,$chr(32)))
  if $prop == mul { while %&#168; <= %ù { var %z $fact($gettok(%::,$v1,32)).res , %: $calc($gettok(%z,4,32) * %:) | inc %&#168; } | return Multiplication des factorielles: $+($replace($1-,$chr(32),!*),!) = %: }
  if $prop == add { while %&#168; <= %ù { var %z $fact($gettok(%::,$v1,32)).res , %: $calc($gettok(%z,4,32) + %:) | inc %&#168; } | return Addition des factorielles: $+($replace($1-,$chr(32),!+),!) = $calc(%: -1) }
}
alias fact {
  var %x $1-
  if $prop == op { return $fact1(%x).op }
  elseif $prop == res { return $fact1(%x).res }  elseif $prop opres { return $fact1(%x).op $gettok($fact1(%x).res,4,32) }
  elseif $prop == invop { return $fact2(%x).op }
  elseif $prop == invres { return $fact2(%x).res }  elseif $prop invopres { return $fact2(%x).op $gettok($fact2(%x).res,5,32) }
  elseif $prop == mul { return $fact3(%x).mul }
  elseif $prop == add { return $fact3(%x).add }
  else { echo -s /fact: paramètres erronés }
}


Cela s'utilise avec $fact().prop vous l'aurez compris..
$fact().op retourne l'opération, .res retourne le résultat, .opres retourne les deux.
.invop retourne le calcul de la décomposition du nbr, .invres retourne son résultat et .invopres retourne le calcul + le résultat.
.mul est la multiplication de factorielles et .add est l'addition voila.. en espérant ne pas m'être trompé dans les formules de calculs..

----

8 réponses

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
23 sept. 2004 à 02:20
bah le factoriel standard a mon avis ya pas bien moyen de l'optimiser : on est super vite limité puisque mirc merde avec trop de chiffres mais rien a redire a priori (c bien que $fact(0).res rende 1 :pp c souvent le ti détail qui merde dans d'autres proc)

le .invop .invopres etc je sais pas du tout ce que tu fais ni en quelle langue lol j'veux bien que tu m'éclaires ... c'est quoi la "décomposition d'un nombre" ? ex : > factorielle de 6 1+6! 1720 < gné ?

si on veut chipotter : return $fact2(%x).op = $gettok($fact2(%x).res,5,32) < c'est pas top d'appeler fondamentalement deux fois la même chose si t'avais des grands nombres a gérer (genre très grands) ton alias en souffrirait mais vu que mirc merde bien bien avant que ca soit visible , rien a redire en fait...

quant a .mul et .add ils me paraissent un peu superflus , si on enlève le blabla dans tes return il suffit d'un $calc($fact(N).res + $fact(M).res) (ou *) donc bon pas top utile...

suggestion : $props suivantes : binomial ? arrangements ?(avec les simplifications adéquates pour éviter que ca merde même quand mirc limite : genre C(n,p) avec N 100 et p 99 que ca merde pas même si séparément les 99! et 100! vont merder ...)

pour faire vraiment sauter les limitations de $calc faut recoder la somme (sur les relatifs) le produit et la division , j'l'ai en grde partie fait mais ca rame bcp trop pour le moment j'peux t'envoyer ca s'tu veux a l'occasion :p

sur ce, dodo
za +

PaDa
3
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
23 sept. 2004 à 07:41
En seconde t'as déja du voir pythagore non ? et les identités remarquables ? tu devrais pouvoir faire deux trois ptits aliases avec ca j'pense :ppp
PaDa
3
cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 2
23 sept. 2004 à 07:26
J'adore !!
J'aimerais trop connaitre des trucs sur les maths pour les coder comme toi, mais bon jsuis qu'en seconde, et pis on a pas fait de trucs assez bien.
Sinon, j'vois pas trop comment optimiser :/

- Re[M]i_34 alias Ch0x -
0
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 1
23 sept. 2004 à 07:44
Merci bcp pada, ça devrait m'aider tout ce que tu m'as dis.
Remi, les factorielles je les ai pas vu en cour, j'en ai eu besoin pour faire certains calculs personnels donc je les ai appris sur le net :o)

et pour ce qui est de la décomposition faut que je revois le system entier mais je crois qu'il y a la possibilité de décomposer un grand factorielle en une somme de petits factorielles ..

----
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
23 sept. 2004 à 13:39
ok d'acc tofu j'connais pas ce résultat mais bon c tellement vaste les maths ... mais ca me parait bizarre qu'on aie intérêt a remplacer un produit par une somme , a priori une somme ca risque d'être plus gros les nombres , si t'as plus d'infos envoie :p
PaDa
0
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 1
23 sept. 2004 à 18:52
voila, j'ai retrouvé ce que j'avais voulu faire avec le .invop :
http://membres.lycos.fr/villemingerard/Compter/Factsous.htm

tout en bas ils mettent:
148 349 = !1 + !4 + !8 + !3 + !4 + !9
§ Somme des sous-factorielles de ses chiffres

et j'avais voulu recréer ça ;o)

----
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
23 sept. 2004 à 19:18
yeah ok
j'connais ce site , j'le recommande d'ailleurs a tous ceux qui liront ce post =p
en fait c'est dans la section "curiosité" , c'est un truc un peu exotique ; de la même facon plus parlante (en tout cas pour moi) bah 2+2=2*2=2^2 : c'est un hasard , c'est pas pour ca que ca s'appliquera a tous les nombres ! mais le truc de "sous factorielle" expliqué peut ptet servir a des codages , des signatures de nombres ou je n'sais quoi :p allé tiens j'me remets aux maths avec mirc ^^
PaDa
0
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 1
23 sept. 2004 à 19:21
ah ok j'avais pas calculé que ct juste pour ce nombre :o) mais ouai en fait ct le principe des sous factorielles que je voulais appliquer.

----
0
Rejoignez-nous