C
Sa se determine toate descompunerile in diferenta de patrate ale lui nSe citeste n o valoare intreaga pozitiva. Sa se determine toate descompunerile in diferenta de patrate ale lui n. Analiza problemei – elaborarea algoritmului: Aratam in continuare cum se poate evita solutia 'banala'-capcana ce-ar consta in doua cicluri for imbricate. Solutia urmatoare efectueaza doar radical din n pasi, fata de n2 pasi ai solutiei 'la prima mina' - pentru a determina toate descompunerile in diferenta de patrate ale lui n pornim de la formula a2-b2=(a+b)(a-b)=n - observam ca produsul termenilor a+b si a-b este produsul a doi dintre divizorii lui n,unul din termeni este divizor (d) a lui n celalalt este tot divizor a lui n si il aflam impartindu-l pe n la d (n div x) - notam cu x primul divizor a lui n (x=d) si cu y=n div x si obtinem relatiile a+b=x deci un sistem de doua ecuatii cu doua necunoscute ,pe care il rezolvam a-b=y prin metoda reducerii ,si avem 2a=x+y => a=(x+y )/2 , b=(y-x)/2, - pentru ca (x+y)/2 sa fie o solutie a ecuatiei a2-b2=(a+b)(a-b)=n trebuie ca x+y sa fie un numar par si y-x sa fie un numar par - daca aceasta conditie este indeplinita afisam solutia care indeplineste conditia ceruta. Program descompunere_patrate; var n,d,a,b,x,y:integer; BEGIN write('n=');readln(n); for d:=1 to trunc(sqrt(n)) do if n mod d =0 then begin x:=d; y:=n div x; if (x+y) mod 2 =0 then begin a:=(x+y) div 2; b:=(y-x) div 2; writeln(n,'=',a*a,'-',b*b); end; end; readln; END.
|