Informatică, întrebare adresată de jonas2, 9 ani în urmă

Solutie de 100 de puncte va rog!
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ței
s – prin care primește un tablou unidimensional care reține elementele secvenței, indexate de la 1 la n
a – prin care primește un număr natural nenul
b – prin care primește un număr natural nenul
c – 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.000
0 < a,b < 200
0 < c < 1.000.000.000
numerele din secvența s sunt mai mici decât 65.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).


Utilizator anonim: cred ca e algoritmul lui euclid extins
Utilizator anonim: am citit ceva pe infoarena despre asta
jonas2: totusi trebuie sa gasesc perechile (x,y) din vectorul dat si in O(n) sau O(n logn)
jonas2: acolo se prezinta doar o solutie a ecuatiei

Răspunsuri la întrebare

Răspuns de tferenc
7
int diofantic(int n,int s[50001],int a,int b,long long c)
  {
    int k=0;int i=1;int j=n;
    while(i<=n || j>0)
   {
        if(a*s[i]*s[i]+b*s[j]*s[j]==c )
       { k++; i++; }
        if(a*s[i]*s[i]+b*s[j]*s[j]<c) i++;
        if(a*s[i]*s[i]+b*s[j]*s[j]>c) j--; } return k; }

tferenc: varianta de 100 de puncte :
tferenc: int diofantic(int n, int s[50001], int a,long long b,int c)
{
int k=0;int i=1; int j=n;
while(i<=n && j>0)
{
if(a*s[i]*s[i]+b*s[j]*s[j]==c )
{
k++;
i++;
}
if(a*s[i]*s[i]+b*s[j]*s[j]<c)
i++;
if(a*s[i]*s[i]+b*s[j]*s[j]>c)
j--;
}
return k;
}
tferenc: scuze pentru prima, gresita.
Utilizator anonim: Sa inteleg ca (,) ce ai scris prima data e gresit? Mai poti edita?
jonas2: mersi!
Alte întrebări interesante