Cerința
Se dau a
, b
, c
și p
numere naturale, astfel încât a ≥ b + c
și p
număr prim. Să se afle dacă numărul \( { a! \over b!\ \cdot \ c! } \) este divizibil cu p
, și să se afle exponentul lui p
în descompunerea în factori primi a acestui număr.
Date de intrare
Programul citește de la tastatură numerele a
, b
, c
și p
, separate prin spații.
Date de ieșire
Programul va afișa pe ecran numărul e
, reprezentând exponentul lui p
în descompunerea în factori primi a numărului natural \( { a! \over b!\ \cdot \ c! } \). Dacă numărul nu este divizibil cu p
, atunci se va afișa 0
.
Restricții și precizări
1 ≤ a , b , c ≤ 1.000.000.000
a ≥ b + c
2 ≤ p ≤ 1.000
Exemplu
Intrare
12 4 5 3
Ieșire
3
Explicație
Știm de la matematică faptul că numărul \( { a! \over b!\ \cdot \ c! }\ =\ {(b+c)!\ \cdot \ (b+c+1)\ \cdot\ (b+c+2) \cdot…\ \cdot (a-1)\cdot\ a \over b!\ \cdot \ c! } = C_{b+c}^{b}\ \cdot (b+c+1) \cdot (b+c+2)\cdot …\cdot (a-1) \cdot a \) este natural, deci putem vorbi despre divizibilitatea lui prin p
( Numărul \( C_{b+c}^{b} \) reprezintă combinări de \( b+c \) elemente luate câte \( b \) ).
De asemenea se știe că exponentul numărului prim p
în descompunerea în factori primi a numărului a
! este \( \left [ a \over p \right ]+\left [ a \over p^{2} \right ]+\left [ a \over p^{3} \right ]+… \), unde prin \( \left [ x \right ] \) am notat partea întreagă a lui \( x \).
În exemplul dat avem \( {12! \over 4! \cdot 5!}=3^{3}\cdot 7\cdot 8\cdot 10\cdot 11 \), deci exponentul este 3
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema p3factoriale:
#include <iostream>
using namespace std;
long long a,b,c,p,exp,expa,expb,expc,put;
int main()
{
cin>>a>>b>>c>>p;
put=p;
while(a/put!=0)
{
expa=expa+a/put;
put=put*p;
}
put=p;
while(b/put!=0)
{
expb=expb+b/put;
put=put*p;
}
put=p;
while(c/put!=0)
{
expc=expc+c/put;
put=put*p;
}
exp=expa-expb-expc;
cout<<exp;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1011 p3factoriale
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1011 p3factoriale de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!