# PBinfo #4368 – perfecte1 – Rezolvare C++

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

## Enunț

Cerința
Dorel este pasionat de studiul pătratelor perfecte. El doreşte să afle răspunsul la Q cerinţe de forma: dacă se dau numerele naturale l, r, a, b, cu l ≤ r, să se afle câte numere naturale x cuprinse între l şi r (inclusiv acestea) au proprietatea că x+a şi x+b sunt simultan pătrate perfecte.

Date de intrare
Pe prima linie a intrării standard se află numărul Q, iar pe următoarele Q linii se află câte patru valori l, r, a, b, separate prin spaţiu.

Date de ieșire
La ecran se vor afişa, pe linii diferite, răspunsurile la cele Q cerinţe ale lui Dorel.

Restricții și precizări

1 ≤ Q ≤ 100.000
1 ≤ l ≤ r ≤ 2.000.000.000
1 ≤ a < b ≤ 1.000.000

Exemplu:
Intrare

3
1 9 3 10
13 780 4 61
35 789 4 3279
Ieșire

1
2
0
Explicație
Pentru primul exemplu, între numerele 1 şi 9 există o singură valoare a lui x pentru care numerele x+3 şi x+10 să fie simultan pătrate perfecte, şi anume x=6.

Pentru al doilea exemplu, între numerele 13 şi 780 există două valori ale lui x pentru care numerele x+4 şi x+61 să fie simultan pătrate perfecte, şi anume x=60 şi x=780.

## Cod sursă C++

```cpp
#include <iostream>
#define ll long long
using namespace std;
ll Q,a,b,l,r,e;
void solve()
{
    ll d,sol,j,k,u,x;
    d = b-a;
    sol = 0;
    for(j = 1; j*j < d; j++)
        if(d%j==0)
    {
        k = d/j;
        if(k%2-j%2==0)
        {
            u = (k-j)/2;
            x = u*u-a;
            if((x>=l)and(x<=r)) sol++;
        }
    }
    cout << sol << "\n";
}
int main()
{
    cin >> Q;
    for(e = 1; e <= Q; e++)
    {
        cin >> l >> r >> a >> b;
        solve();
    }
    return 0;
}
```

## Resurse

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