Cod sursa(job #130520)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 1 februarie 2008 14:19:56
Problema Ecuatie Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.75 kb
var q1gen,q2gen,maxq,w,minq,n,a,b,c,k,divi,i,j,x,y:longint;
    f,g:text;
    ok:boolean;
begin
     assign(f,'ecuatie.in'); reset(f);
     assign(g,'ecuatie.out'); rewrite(g);
     readln(f,a,b,c,k);
     q1gen:=-trunc((-b+trunc(sqrt(b*b-4*a*c)))/(2*a));
     q2gen:=-trunc((-b-trunc(sqrt(b*b-4*a*c)))/(2*a));
     if q1gen+q2gen<>-b/(2*a) then
     begin
          q1gen:=-q1gen;
          q2gen:=-q2gen;
     end;
     x:=k div 2;
     y:=k mod 2;
     i:=0;
     ok:=true;
     if a<0 then n:=a
            else n:=-a;
     j:=n;
     while (i<x+y)and(ok) do
     begin
          if j<>0 then
          if n mod j = 0 then
          begin
               inc(i);
               divi:=j;
          end;
          inc(j);
          if j>abs(n) then ok:=false;
     end;
     if ok then
     begin
          if y=1 then
          begin
               write(g,'(');
               if divi=-1 then write(g,'-x')
                          else
                              if divi=1 then write(g,'x')
                              else write(g,divi,'x');
               if divi*q1gen>divi*q2gen then
               begin
                    minq:=divi*q2gen;
                    maxq:=a div divi*q1gen;
               end
                                        else
               begin
                    minq:=divi*q1gen;
                    maxq:=a div divi*q2gen;
               end;
               if minq<0 then write(g,minq,')(')
                         else write(g,'+',minq,')(');
               if a div divi=-1 then write(g,'-x')
                                else write(g,a div divi,'x');
               if maxq<0 then write(g,maxq,')')
                         else write(g,'+',maxq,')');
               writeln(g);
          end;
          if y=0 then
          begin
               write(g,'(');
               if divi=-1 then write(g,'-x')
                          else
                              if divi=1 then write(g,'x')
                              else write(g,divi,'x');
               if divi*q2gen>divi*q1gen then
               begin
                    maxq:=divi*q2gen;
                    minq:=a div divi * q1gen;
               end
               else
               begin
                    maxq:=divi*q1gen;
                    minq:=a div divi * q2gen;
               end;
               if maxq<0 then write(g,maxq,')(')
                         else write(g,'+',maxq,')(');
               if a div divi=-1 then write(g,'-x')
                                else write(g,a div divi,'x');
               if minq<0 then write(g,minq,')')
                         else write(g,'+',minq,')');
               writeln(g);
          end;
     end
     else writeln(g,-1);
     close(g);
end.