Cod sursa(job #451025)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 8 mai 2010 21:01:12
Problema Mins Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.26 kb
var max,min,c,s,d,i,j,k,l,p,r:longint;
    fp:array[1..100] of longint;
    prime:boolean;
{function cmmdc(a,b: longint):longint;
begin
 while b<>0 do
  begin
   c:=a mod b;
   a:=b;
   b:=c;
  end;
 cmmdc:=a;
end;
function prime(a,b:longint):boolean;
var k,i:longint;
begin
  k:=trunc(sqrt(a));
  prime:=true;
  for i:=2 to k do
      if a mod i=0 then
         begin
           if b mod i=0 then
              begin
                prime:=false;
                break;
              end;
           a:=a div i;
           while a mod i=0 do
               a:=a div i;
         end;
  if (a<>1) and (b mod a=0) then prime:=false;
end;}
begin
  assign(input,'mins.in');
  assign(output,'mins.out');
  reset(input);
  rewrite(output);
  readln(c,d);
  if c<d then
     begin
       min:=c-1;
       max:=d-1;
     end
  else
     begin
       min:=d-1;
       max:=c-1;
     end;
  s:=0;
  for i:=2 to min do
    begin
      r:=i;
      p:=0;
      k:=trunc(sqrt(r));
      for l:=2 to k do
        if r mod l=0 then
         begin
          inc(p);
          fp[p]:=l;
          r:=r div l;
          while r mod l=0 do
               r:=r div l;
         end;
      if r<>1 then
         begin
           inc(p);
           fp[p]:=r;
         end;
      for j:=1 to i-1 do
       begin
         prime:=true;
         for l:=1 to p do
          if j mod fp[l]=0 then
               begin
                 prime:=false;
                 break;
               end;
         if prime then inc(s);
       end;
    end;
  s:=s*2;
  for i:=min+1 to max do
    begin
      r:=i;
      p:=0;
      k:=trunc(sqrt(r));
      for l:=2 to k do
        if r mod l=0 then
         begin
          inc(p);
          fp[p]:=l;
          r:=r div l;
          while r mod l=0 do
               r:=r div l;
         end;
      if r<>1 then
         begin
           inc(p);
           fp[p]:=r;
         end;
      for j:=1 to min do
       begin
         prime:=true;
         for l:=1 to p do
          if j mod fp[l]=0 then
               begin
                 prime:=false;
                 break;
               end;
         if prime then inc(s);
       end;
    end;
  writeln(s+1);
  close(output);
end.