Rezolvare completă PbInfo #1713 ecuatie3

Cerința

Fie N și T două numere naturale.

Să se determine numărul soluțiilor diferite S, ale ecuației \( x_1 \cdot x_2 \cdot \cdots \cdot x_N = T \), în mulțimea numerelor naturale.

Date de intrare

Fișierul de intrare ecuatie3.in conține pe primul rând numerele N și T cu semnificația de mai sus, despărțite printr-un spațiu.

Date de ieșire

Fișierul de ieșire ecuatie3.out va conține pe prima linie numărul S.

Restricții și precizări

  • 1 ≤ N ≤ 10
  • 2 ≤ T < 10^15
    Două soluții (x1,x2,...,xN) și (y1,y2,...,yN) se consideră a fi diferite dacă (x1≠y1 sau x2≠y2 sau …. sau xN≠yN)

Exemplul 1

ecuatie3.in

2 28

ecuatie3.out

6

Explicație

N = 2 și T = 28

Sunt 6 perechi (x1,x2) de numere naturale cu proprietatea că x1 * x2 = 28:
(1,28), (2,14), (4,7), (7,4), (14,1), (28,1)

Exemplul 2

ecuatie3.in

3 10

ecuatie3.out

9

Explicație

N = 3 și T = 10

Sunt 9 triplete (x1,x2,x3) de numere naturale cu proprietatea că x1 * x2 * x3 = 10:

(1,1,10), (1,2,5), (1,5,2), (1,10,1)
(2,1,5), (2,5,1)
(5,1,2), (5,2,1)
(10,1,1)

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 ecuatie3:

// Solutie de 100 puncte - sursa cu descompunere in factori primi si produs de combinari
// O(sqrt(n))

#include <fstream>
#define fmax 50

using namespace std;

int main()
{
    unsigned long long n,w,i,j,k=0,fact,p=1,t,e[fmax];

    ifstream f("ecuatie3.in");
    ofstream g("ecuatie3.out");

    f>>n>>t;


    w=t;

    // extrag factorii de 2
    fact=0; 
    while (w%2==0)
            {w/=2;fact++;}

    if (fact) e[++k]=fact;
            

    // descompun t in factori primi
    i=3;
    while (i*i<=w)
    {
        if (w%i==0)
            {
            fact=0;
            while (w%i==0) {w/=i;fact++;}
            if (fact) e[++k]=fact;
            }
        i+=2;
    }

    if (w>i-1) e[++k]=1;

    //calculez cate solutii are ecuatia

    for(i=1;i<=k;i++)
        for(j=1;j<=n-1;j++)
            p=p*(e[i]+j)/j;


    g<<p<<"
";

    f.close();
    g.close();
    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 #1713 ecuatie3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1713 ecuatie3 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!