fbpx

Problema #2141 – exp – Rezolvari PBInfo

de Mihai-Alexandru

Se dă un şir de n numere naturale nenule x1, x2, …, xn şi un număr natural m.

Cerința

Să se verifice dacă valoarea expresiei x1x2xnmx1x2xnm este un număr natural. În caz afirmativ să se afișeze acest număr descompus în factori primi.

Date de intrare

Fișierul de intrare exp.in conține pe prima linie m, pe linia a doua n, iar pe linia a treia numerele x1, x2, …, xn separate între ele prin câte un spațiu.

Date de ieșire

În fișierul de ieșire exp.out se va scrie pe prima linie cifra 0, dacă valoarea expresiei nu este un număr natural, respectiv 1 dacă este un număr natural. Dacă valoarea expresiei este un număr natural pe următoarele linii se vor scrie perechi de forma p e (p este factor prim care apare în descompunere la puterea e>=1). Aceste perechi se vor scrie în ordine crescătoare după primul număr (adică p).

Restricții și precizări

  • 0 < n < 5000
  • 0 < xi < 30.001, pentru orice i=1..n
  • m poate fi una din cifrele 2, 3, 4.

Exemplul 1:

exp.in

2
4
32 81 100 19

exp.out

0

Exemplul 2:

exp.in

2
4
32 81 100 18

exp.out

1
2 4
3 3
5 1
#include <bits/stdc++.h>
using namespace std;
ifstream cin("exp.in");
ofstream cout("exp.out");
int f[5001];
int main()
{
    int n , x , rad , ok = 0;
    cin >> rad;
    cin >> n;
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> x;
        int d = 2;
        while(x > 1)
        {
            int p = 0;
            while(x % d == 0) p++ , x /= d;
            if(p) f[d] += p;
            d++;
            if(d * d > x) d = x;
        }
    }
    for(int  i = 1 ; i <= 5000 ; i++)
        if(f[i] != 0)
            if(f[i] % rad != 0) ok = 1;
    if(ok == 1)cout << 0;
    else
    {
        cout << 1 << '\n';
        for(int  i = 1 ; i <= 100 ; i++)
        if(f[i] != 0)
            cout << i << " " << f[i] / rad << '\n';
    }
}
Comentarii

S-ar putea sa iti placa