{ Delphi } {* * Problem : DIVISOR * Contest : UOI-2006 (Dnepropetrovsk) * Type : Solution * Date : March 30, 2006 * Author : Andrey Dereza * Language : Pascal * Compiler : Delphi 6.0 * Algorithm: Author Solution *} {$A+,B-,C-,D-,E-,F-,G+,H+,I-,J-,K-,L-,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y-,Z1} {$MINSTACKSIZE $00004000} {$MAXSTACKSIZE $00100000} {$IMAGEBASE $00400000} program divisor; {$APPTYPE CONSOLE} uses SysUtils; var prost:array[0..13] of integer=(2,3,5,7,11,13,17,19,23,29,31,37,41,43); divcnt:array[0..13] of integer; var res,n:integer; f:textfile; function Work:integer; var nn:integer; i,j:integer; begin if n=1 then begin Work:=1; Exit; end; for i:=0 to 13 do divcnt[i]:=0; for i:=2 to n do begin nn:=i; for j:=0 to 13 do while (nn mod prost[j]=0) do begin Inc(divcnt[j]); nn:=nn div prost[j]; end; end; Result:=1; for i:=0 to 13 do if divcnt[i]>0 then Result:=Result*(divcnt[i]+1); end; begin AssignFile(f,'divisor.dat'); Reset(f); ReadLn(f,n); CloseFile(f); res:=Work; AssignFile(f,'divisor.sol'); ReWrite(f); WriteLn(f,res); CloseFile(f); end.