👤

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.

Salut Ma Poate Ajuta Cineva Cu Aceste Probleme Va Rog Frumos Ma Pregatesc Pentru Bac Si Miar Fi De Mare Ajutor C Va Rog class=

Răspuns :

► 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 [tex]\sqrt{x}[/tex] si [tex]\sqrt{y}[/tex]. Daca [tex]\sqrt{x} \leq i \leq \sqrt{y}[/tex] atunci toate patratele perfecte cuprinse intre [tex]\sqrt{x}[/tex] si [tex]\sqrt{y}[/tex] sunt de forma [tex]i^2[/tex].

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.

Vezi imaginea ANDREI750238