function ulam(n,k)

% Construction de la spirale d'Ulam avec N entiers consécutifs.
% les nombres entiers sont inscrits à la suite les uns des autres
% selon une spirale carrée. Sur la figure les diamètres des sphères
% associées à chaque nombre sont proportionnels au nombre de
% diviseurs de ce nombre. Un nombre premier se réduit à un point.
% K est le rayon des sphères unitaires.

% Jean-Bernard Roux, avril 1999, MatLab 5.3

% représentation en spirales; un rayon de 1 est un point
[sx,sy,sz]=sphere(10);
sx=sx./k;
sy=sy./k;
sz=sz./k;
%%%%%%%%%plot(0,0,'.','markersize',1)
surf(sx,sy,sz)
hold on
x=0; y=0; 
d=[1 0];
pas=1; nbp=0; def=0;
for i=1:n
   nbp=nbp+1;
   x=x+d(1);
   y=y+d(2);
   %%%%%%%plot(x,y,'.','markersize',4*length(factor(i)))
   L=length(factor(i));
   X=sx*L;
   Y=sy*L;
   Z=sz*L;
   surf(x+X,y+Y,Z)
   if nbp==pas	% on tourne à gauche
      def=def+1;
      if def==2
         def=0;
         pas=pas+1;
      end
      nbp=0;
      d=[-d(2) d(1)];
   end   
end
axis equal
axis off
hold off

