Pentru a determina cu siguranta daca algoritmul prietenului este bun, punem programul sa calculeze mai intai 10.000.000! dupa aceea 9.999.999!. Si impartim numarul rezultat de la primul calcul la numarul din cel de-al doilea calcul. Rezultatul trebuie sa fie exact 10.000.000 . In caz contrar, algoritmul nu e bun. De ce merge? Pentru a generaliza putem folosi algoritmul n!/(n-1)! = n Matematic il putem scrie pe n! de la numarator ca (n-1)!*n . Algoritmul devine (n-1)!*n/(n-1)! Iar acest (n-1)! de la numarator se simplifica cu cel de la numitor si ramane n. Sigura situatie prin care numarul de la numarator se simplifica cu cel de la numitor este atunci cand algoritmul calculeaza corect n! si (n-1)!. Ca sa dau un exemplu mai concret folosesc numere mici ca sa fie usor de inteles. Presupunem n=5. Dupa algoritmul folosit de mine avem (5!)/(5-1)! = 5!/4! = 120/24 120/24 = 5 (adevarat) Inseamna ca programul a calculat corect n! si (n-1)!. Daca era sa fi calculat gresit. Sa presupunem ca la 5! programul nu a facut calculul corect si a cosiderat ca 5! este altceva decat 120. De exemplu 121. Ar insemna ca 121/24 = 5,041111 - Numarul fiind diferit de 5. Adica de n => algoritmul nu calculeaza bine factorialul. Sper ca m-am facut inteles