Informatică, întrebare adresată de eduardmihailescu26, 8 ani în urmă

Salut. Ma poate ajuta cineva cu aceste probleme va rog frumos? Ma pregatesc pentru bac si mi-ar fi de mare ajutor. C++ va rog.

Anexe:

Răspunsuri la întrebare

Răspuns de andrei750238
4

► Subprogram :

void patrate(int x, int y){

int s=0, ix, iy;

ix = sqrt(x);

if(ix*ix<x) ++ix;

iy = sqrt(y);

if(ix>iy){

 std::cout << "nu exista";

 return;

}

for(int i=ix; i<iy; i++){

 std::cout << i*i << "+";

 s+=i*i;

}

s+=iy*iy;

std::cout << iy*iy << "=" << s;

}

► Explicatie :

In loc sa verificam la rand toate elementele cuprinse intre x si y ne putem folosi de numerele intregi cuprinse intre \sqrt{x} si \sqrt{y}. Daca \sqrt{x} \leq  i \leq  \sqrt{y} atunci toate patratele perfecte cuprinse intre \sqrt{x} si \sqrt{y} sunt de forma i^2.

Acest lucru reduce drastic complexitatea algoritmului, nefiind necesara testarea fiecarui element daca acesta e patrat perfect.

► Nota :

E nevoie de includerea bibilotecii cmath in fisier pentru functionarea corecta a algoritmului.

Anexe:

eduardmihailescu26: Multumesc mult!
eduardmihailescu26: Crezi ca ma poti ajuta si la celelalte probleme la care am pus intrebari? Sunt tot de informatica. Le gasesti pe profilul meu cred.
Alte întrebări interesante