papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Grands nombres : Calcul de factorielle N Jeu 16 Nov 2023 - 6:16 | |
| Ce code est destiné au compilateur car il demande beaucoup de calculs Il peut tourner sur l'interpreteur mais vous devrez beaucoup patienter. Pour le tester sur l'interpréteur modifiez la ligne 20: par exemple - Code:
-
n1 = 100
- Code:
-
rem ============================================================================ rem Grands nombres rem Calcul de factorielle N rem Papydall le 16 / 11 / 2023 rem ============================================================================ rem Ce programme calcule les factorielles exactes des nombres de 1 à 807 rem Factorielle 807 est déjà un nombre de 1998 chiffres. rem ============================================================================ rem Il est recommandé de faire tourner ce code sur le compilateur qui est rem beaucoup plus rapide que l’interpreteur. rem ============================================================================
dim n,n1,i,k,r,m,im,i1,j1 dim a%(1999),b%(1999),c%(1999),c1%(1999) dim a$ ,t$ width 0,1300 memo 10 : top 10,20 : left 10,50 : width 10,1200 : height 10,400 : bar_both 10
n = 1999 n1 = 807 : ' vous ne pouvez pas depasser cette limite à moins de modifier ' les dimensions des variables a%(), b%(), c%(), c1%() ' Factorielle 807 est déjà un nombre de 1998 chiffres for i = 2 to n : c%(i) = 0 : next i c%(1) = 1 for k = 1 to n1 caption 0,"Veuillez patienter, je calcule ... " + str$(k) + " / " + str$(n1) t$ = "factorielle " + str$(k) + " = " a$ = str$(k) calcul_3() for i = 1 to n : b%(i) = a%(i) : a%(i) = c%(i) : next i Calcul_2() for i = 1 to n : a%(i) = c%(i) : next i Calcul_4() next k caption 0, "Factorielle " + str$(n1) + " est un nombre de " + str$(len(t$)-15-len(str$(n1))) + " chiffres" end rem ============================================================================ SUB Calcul_1() r = 0 for i = 1 to n m = c1%(i) + c%(i) + r r = int(m/10) : c%(i) = m - 10 *r next i END_SUB rem ============================================================================ SUB Calcul_2() for i = 1 to n : c%(i) = 0 : next i i = n while (a%(i) = 0) and (i > 1) i = i - 1 end_while im = i for i1 = 1 to n if b%(i1) <> 0 for i = 1 to n : c1%(i) = 0 : next i r = 0 for j1 = 1 to im+1 m = a%(j1) * b%(i1) + r r = int(m/10) c1%(j1+i1-1) = m-r*10 next j1 Calcul_1() end_if next i1 END_SUB rem ============================================================================ SUB Calcul_3() for i = 1 to n : a%(i) = 0 : next i for i = 1 to len(a$) a%(i) = val(mid$(a$,len(a$) + 1 -i ,1)) next i END_SUB rem ============================================================================ SUB Calcul_4() i = n while a%(i) = 0 i = i - 1 end_while repeat t$ = t$ + str$(a%(i)) i = i - 1 until i = 0 item_add 10,t$ END_SUB rem ============================================================================
Je constate qu'il donne le même résultat que celui que klaus à poster ici | |
|