Rezolvare completă PbInfo #1011 p3factoriale

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 Adresa de email.

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!