Cod sursa(job #123592)

Utilizator CezarMocanCezar Mocan CezarMocan Data 16 ianuarie 2008 18:14:49
Problema Indep Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.29 kb
const m=1000;
type nr_mare=array[0..100] of byte;
var x:array[1..501,1..1010] of nr_mare;
    v:array[1..501] of longint;
    n,i,j,k,c:longint;
    unu:nr_mare;

function cmmdc(a,b:Longint):longint;
var r:longint;
begin
r:=a mod b;
while r<>0 do
        begin
        a:=b;
        b:=r;
        r:=a mod b;
        end;
cmmdc:=b;
end;

procedure aduna(var a,b,c:nr_mare);
var i:longint;
begin
c[0]:=a[0];
if b[0]>c[0] then
        c[0]:=b[0];
for i:=1 to c[0] do
        c[i]:=a[i]+b[i];
for i:=1 to c[0] do
        begin
        c[i+1]:=c[i+1]+c[i] div 10;
        c[i]:=c[i] mod 10;
        end;
if c[c[0]+1]>0 then
        inc(c[0]);
end;


begin
assign(input,'indep.in');reset(input);
assign(output,'indep.out');rewrite(output);
readln(n);
for i:=1 to n do
        readln(v[i]);
x[1,v[1],0]:=1;x[1,v[1],1]:=1;
unu[0]:=1;unu[1]:=1;
for i:=2 to n do
        begin
        aduna(x[i,v[i]],unu,x[i,v[i]]);
        for j:=1 to m do
                begin
                aduna(x[i,j],x[i-1,j],x[i,j]);
                c:=cmmdc(v[i],j);
                aduna(x[i,c],x[i-1,j],x[i,c]);
                end;
        end;
if (x[n,1,0]=0) then
        x[n,1,0]:=1;
for i:=x[n,1][0] downto 1 do
        write(x[n,1][i]);
writeln;
close(input);close(output);
end.