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
Răspunsuri la întrebare
Răspuns de
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; }
{
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; }
{
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;
}
Alte întrebări interesante
Istorie,
8 ani în urmă
Geografie,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă