Se dau numerele naturale nenule a, b, c, n, urmate de o secvența de n numere naturale distincte ordonate crescător, notată cu s.
Cerința
Scrieți în limbajul C++ definiția completă a subprogramului diofantic care are 5 parametri, după cum urmează:
n– prin care primește un număr natural nenul ce reprezintă numărul de elemente ale secvențeis– prin care primește un tablou unidimensional care reține elementele secvenței, indexate de la1lana– prin care primește un număr natural nenulb– prin care primește un număr natural nenulc– prin care primește un număr natural nenul.
Subprogramul returnează numărul de perechi (x,y) care verifică ecuația: a•x2 + b•y2 = c , unde x și y aparțin secvenței s, cu x≠y.
Restricții și precizări
2 ≤ n ≤ 50.0000 < a,b < 2000 < c < 1.000.000.000- numerele din secvența
ssunt mai mici decât65.535 - parametrii sunt, în această ordine:
n,s,a,b,c.
Exemplu
Fie secvența:
5
0 3 4 5 18
Pentru a=1, b=1, c=25 funcția va returna valoarea 4.
Cele 4 perechi sunt: (3,4), (4,3), (0,5), (5,0).
Important
Soluția propusă va conține doar definiția subprogramului cerut. 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.
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 diofantic :
int diofantic(int n, int s[], long long a, long long b, long long c)
{
/// solutie pur didactica, usor de inteles
int i, j, nr = 0;
/// perechea (a,b)
i = 1; j = n;
while (i < j){
long long x = a * s[i]* s[i] + b * s[j] * s[j];
if ( x < c) ++i;
else
if (x > c) --j;
else {
++nr;
++i; --j;
}
}
/// perechea (b, a)
i = 1; j = n;
while (i < j){
long long x = b * s[i]* s[i] + a * s[j] * s[j];
if ( x < c) ++i;
else
if (x > c) --j;
else {
++nr;
++i; --j;
}
}
return nr;
}
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
.
Rezolvarea problemei #2144 diofantic
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2144 diofantic 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!