Răspuns :
Răspuns:
#include <iostream>
#include <cmath>
using namespace std;
int a,b, c, pp, contor;
int main()
{
cin >> a >> b;
if (a>b) swap(a,b);
c=sqrt(a);
if (c*c<a) ++c;
int pp=c*c;
while (pp<=b)
{
int rast=0;
while (pp)
{
rast=rast*10+pp%10;
pp/=10;
}
if ((int)sqrt(rast)==sqrt(rast))
{++contor;}
++c;
pp=c*c;
}
cout << contor;
}
Explicație:
caut primul pătrat perfect din intervalul [a,b]. De exemplu, pentru a=200, b=500, primul pătrat perfect din interval este 225. cum îl găsim?
luăm partea intreagă a lui sqrt(200) şi o dăm unei varabile, fie c. Dacă c*c<a, atunci ++c;
Pentru a=200, c va fi 14. Deoarece 14*14<200, atunci ++c si devine 15, patratul căruia va fi primul pătrat perfect din interval. Mai luăm o variabilă pp, căria îi dăm valoarea c*c. Aflăm răsturnatul şi dacă e pătrat perfect creştem contorul care numără pătratele perfecte conform condiţiei.
Trecem la următorul pătrat perfect, crescând c şi pp=c*c.
Aici e eficienţa, că după primul pătrat perfect găsit (225, care e 15²), nu cerctăm pe 226, ci pe 16*16, şamd...
Sper că am fost explicit... Succese în cercetare...
Acum
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că resursele disponibile v-au fost de ajutor. Pentru întrebări sau asistență suplimentară, nu ezitați să ne contactați. Ne bucurăm să vă revedem în curând și vă invităm să ne salvați în lista de site-uri preferate!