# PBinfo #4190 – FPatrate – Rezolvare C++

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

## Enunț

Cerința
Subprogramul patrate are trei parametri:


n, prin care primește un număr natural (\( n \in [2, 10^9]\));
x și y, prin care furnizează câte un număr natural cu proprietatea că \(x^2 \cdot y^2 = n\) și \(2 ≤ x < y\) sau valoarea 0, prin fiecare dintre aceștia, dacă nu există două astfel de numere. Dacă sunt mai multe astfel de valori, se furnizează cele corespunzătoare unei valori minime a lui x.

Scrieți definiția completă a subprogramului.

Exemplu:
Pentru n=400, după apel, x=2 şi y=10, iar pentru n=16 sau n=24, după apel, x=0 și y=0.

Important
Soluția propusă va conține definiția funcţiei cerute. Prezența în soluție a altor instrucțiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluției.

## Cod sursă C++

```cpp
void patrate(int n , int &x , int &y)
{
	x = y = 1;
	int d = 2;
	while(n > 1)
	{
		if(n % d == 0)
		{
			if(n % (1LL * d * d) == 0)
			{
				if(x == 1)
					x = d;
				else
					y *= d;
				n /= d * d;
			}
			else
			{
				x = y = 0;
				n = 1;
			}
		}
		else
			d ++;
		if(d * d > n)
			d = n;
	}
	if(x == y)
		x = y = 0;
}
```

## Resurse

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