Cod sursa(job #333005)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 21 iulie 2009 11:11:48
Problema Mins Scor Ascuns
Compilator fpc Status done
Runda Marime 1.73 kb
//cmmdc prin decompunere in factori primi
//descompunerea prin eratostene

{$r-}
const nmax = 10000;
var fi,fo:text;
var fp:array[1..nmax,1..10] of integer;
    nrfp:array[1..nmax] of byte;
    sita:array[1..nmax] of integer;

function ggt(n1,n2:longint):longint;
var i:integer;
begin
  ggt := 2;
  if nrfp[n1]<nrfp[n2] then
     for i := 1 to nrfp[n1] do
       if n2 mod fp[n1][i]=0 then exit
       else
  else
     for i := 1 to nrfp[n2] do
       if n1 mod fp[n2][i]=0 then exit;
  ggt:=1;

end;

function ggt1(n1,n2:longint):longint;
var j:integer;
begin
  ggt1 := 2;
  for j := 1 to nrfp[n2] do
    if n1 mod fp[n2][j]=0 then exit;
  ggt1:=1;
end;


var dx,dy,mini,maxi,i,j,x1,x2,y1,y2,ct,max,d,aux,nrprim:longint;

begin
  assign(fi,'mins.in'); reset(fi);
  assign(fo,'mins.out'); rewrite(fo);
  readln(fi,x2,y2);
  close(fi);

  dx := x2-x1-1;
  dy := y2-y1-1;
  if dx<dy then begin mini := dx; maxi := dy end
  else begin mini := dy; maxi := dx end;

  //construiesc tabloul de factori primi
  for i := 2 to mini do
   if sita[i]=0 then
     begin
       j := i;
       while j<=mini do
         begin
           inc(nrfp[j]);
           fp[j][nrfp[j]]:=i;
           sita[j]:=1;
           inc(j,i)
         end;
     end;
{
  for i := 2 to maxi do
  begin
   write(i,' ');
    for j := 1 to nrfp[i] do
      write(fp[i][j],' ');
   writeln
  end;
}
  ct:=0;

  for i := 2 to mini do
    for j := 1 to i-1 do
     if j=1 then inc(ct)
    else
      if ggt(i,j)=1 then
        inc(ct);


  ct := ct*2;

  for i := mini+1 to maxi do
    for j := 1 to mini do
     if j=1 then inc(ct)
     else
      if ggt1(i,j)=1 then
       inc(ct);

  writeln(fo,ct+1);
  close(fo);
end.