# PBinfo #955 – miny – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Fie N un număr natural nenul şi N numere naturale nenule: x1, x2,…, xN. 
Fie P produsul acestor N numere, P=x1•x2•...•xN.

Cerinţe
Scrieţi un program care să citească numerele N, x1, x2,…, xN şi apoi să determine:
a) cifra zecilor produsului P;
b) cel mai mic număr natural Y, pentru care există numărul natural K astfel încât YK=P. 

Date de intrare
Fișierul de intrare miny.in conţine două linii. Pe prima linie este scris numărul natural N. Pe următoarea linie sunt scrise cele N numere naturale x1, x2,…, xN, separate prin câte un spaţiu.

Date de ieșire
Fișierul de ieșire miny.out va conține:


pe prima linie o cifră reprezentând cifra zecilor produsului P;
pe a doua linie numărul natural M de factori primi din descompunerea în factori primi a numărului Y;
pe fiecare dintre următoarele M linii (câte o linie pentru fiecare factor prim din descompunere) câte două valori F şi E, separate printr-un singur spaţiu, F reprezentând factorul prim iar E exponentul acestui factor din descompunerea în factori primi a lui Y; scrierea în fişier a acestor factori primi se va face în ordinea crescătoare a valorii lor.

Restricții și precizări

2 ≤  N ≤ 50000
2 ≤ x1, x2,…, xN ≤ 10000
pentru rezolvarea corectă a cerinței a) se acordă 20% din punctaj iar pentru rezolvarea corectă a ambelor cerințe se acordă 100% din punctaj.

Exemplu 1
miny.in

6
12 5 60 25 4 36
miny.out

0
3
2 2
3 1
5 1
Explicație
Produsul celor 6 numere este: P=12∙5∙60∙25∙4∙36=12960000.
Cifra zecilor lui P este 0.
Se observă că există 3 valori posibile pentru Y: 12960000, 3600 şi 60 deoarece: 129600001=12960000, 36002=12960000, 604=12960000.
Cea mai mică valoare dintre aceste valori este 60, astfel Y=60=22*3*5.

Exemplu 2
miny.in

3
2 5 7
miny.out

7
3
2 1
5 1
7 1
Explicație
Produsul celor 3 numere este: P=2∙5∙7=70. Cifra zecilor lui P este 7. Există o singură valoare posibilă pentru Y: 70.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream in("miny.in");
ofstream out("miny.out");
int freq[10001], ap[10001], v[10001];
int temp, N, P = 1;
int cmmdc(int a, int b) {
	while (a && b)
		if (a > b)  a = a % b;
		else b = b % a;
	return a + b;
}
int main() {
	v[2] = 1;
	for (int i = 3; i <= 10000; i = i + 2)
		v[i] = 1;
	for (int i = 3; i <= 10000; i = i + 2)
		if (v[i] != 0)
			for (int j = 2 * i; j <= 10000; j = j + i)
				v[j] = 0;
	in >> N;
	for (int i = 1; i <= N; i++) {
		in >> temp;
		freq[temp]++;
		P = (P * temp) % 100;
	} for (int i = 2; i <= 10000; i++) {
		if (freq[i])
			if (v[i])
				ap[i] = ap[i] + freq[i];
		else {
			temp = i;
			for (int j = 2; j <= 10000 && temp > 1; j++)
				while (v[j] && (temp % j == 0) && temp > 1) {
					ap[j] = ap[j] + freq[i];
					temp = temp / j;
				}
		}
	} int M = 0; temp = 0;
	for (int i = 2; i <= 10000; i++)
		if (ap[i]) {
			M++;
			temp = cmmdc(temp, ap[i]);
	} out << P / 10 << endl << M << endl;
	for (int i = 2; i <= 10000; i++)
		if (ap[i])
			out << i << " " << ap[i] / temp << endl;
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/955)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/955/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-955/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
