Cod sursa(job #123600)

Utilizator CezarMocanCezar Mocan CezarMocan Data 16 ianuarie 2008 18:25:21
Problema Indep Scor 95
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.99 kb
const m=1000;
const baza=10000;
type nr_mare=array[0..50] of longint;
var x,y:array[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;

procedure add(var a,b:nr_mare);
var t,i,aux:longint;
begin
i:=1;
t:=0;
while (i<=a[0])or(i<=b[0])or(t>0) do
        begin
        aux:=(a[i]+b[i]+t) mod baza;
        t:=(a[i]+b[i]+t) div baza;
        a[i]:=aux;
        i:=i+1;
        end;
a[0]:=i-1;
end;

procedure afisare(var a:nr_mare);
var aux,i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do
        if a[0]=0 then
                write('0000')
        else
                begin
                aux:=a[i];
                while aux*10<baza do
                        begin
                        write(0);
                        aux:=aux*10;
                        end;
                write(a[i]);
                end;
writeln;
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[v[1],0]:=1;x[v[1],1]:=1;
y:=x;
unu[0]:=1;unu[1]:=1;
for i:=2 to n do
        begin
        fillchar(x,sizeof(x),0);
        add(x[v[i]],unu);
        for j:=1 to m do
                begin
                add(x[j],y[j]);
                c:=cmmdc(v[i],j);
                add(x[c],y[j]);
                end;
        y:=x;
        end;
if (x[1,0]=0) then
        x[1,0]:=1;
afisare(x[1]);
writeln;
close(input);close(output);
end.