Informatică, întrebare adresată de infomatrix, 8 ani în urmă

Cum calculez combinari de n luate cate k daca am n mai mic sau egal cu 1000?
este vreo alta metoda in afara de cea a calcularii factorialului?
ma gandeam la invers modular,dar nu prea stiu sa aplic

Răspunsuri la întrebare

Răspuns de andrei750238
0

Combinari de n luate cate k = n! / ((n-k)! * k!)

Iar de multe ori poti sa simlifici n! cu (n-k)! si iti ramane (n-k+1)(n-k+2)...(n-1)n supra k!

Sau uneori se poate simplifica cu k mai usor. Nu trebuie sa caluzlezi mereu factorialul, in multe exercitii poti simplifica usor si inmultesti doar cateva numere.


infomatrix: asta e la mate, la info am nevoie de eficienta daca nu vreau sa calculez factorialul
asta intrebam eu practic,cum pot sa implementez calculul asta pt numere mari
andrei750238: Incerc sa verific ceva (mi-a venit o idee) si iti dau programul daca merge
infomatrix: ok
andrei750238: #include
using namespace std;

int produs( int i, int k){
//Calculeaza produsul i(i+1)(i+2)...k
int produs=1;
for(i;i<=k;i++)
produs *= i;
return produs;
}

int combinari(int n, int k){
if ((n-k)>k) return produs(n-k+1, n)/produs(1,k);
else return produs(k+1, n)/produs(1,n-k);
}

int main()
{
int a,b;
cin >> a >> b;
cout << combinari(a,b);
}
andrei750238: Sau uite programul aici : https://pastebin.com/Jm6nJySg

Functioneaza pe rationamentul dat de mine mai sus.
infomatrix: tot iau limita de timp
infomatrix: mersi totusi
Alte întrebări interesante