function alphamagique(Nb,logo,maxn)
%Affiche les carrés alphamagiques.
% La fonction ALPHAMAGIQUE(NB,LOGO,MAXN) recherche les carrés 
% alphamagiques donnés par les nombres NB et leurs logorithmes
% LOGO. MAXN indique le dernier nombre formant le pivot. 
% Il est optionnel. Par défaut: MAXN=length(logo).

% jbr 12-11-97

if nargin==2
	maxn=length(logo);
end

nbca=0;	% nombre de carrés alphamagiques

for pivot=4:maxn-4;
 fin=min(2*pivot-1,maxn);
 deb=2*pivot-fin;
 M=[deb:pivot-1; pivot*ones(1,pivot-deb);fin:-1:pivot+1]; % diagonales
						% à partir du pivot
 lo1=logo(M(1,:));		% logorithme de M
 lo2=logo(M(2,:));
 lo3=logo(M(3,:));
 i=find((lo2-lo1)==(lo3-lo2));	% recherche des suites arithm.
 if ~isempty(i)
   CM=M(:,i);
   LM=[lo1(i);lo2(i);lo3(i)];
   cm=3*pivot;
   cl=3*logo(pivot);
   [li,co]=size(CM);
   for j=1:co-1
    for k=j+1:co
     n1=cm-(CM(1,j)+CM(1,k));	% calcul des valeurs 
     n2=cm-(CM(3,k)+CM(3,j));	% manquantes dans
     n3=cm-(CM(1,j)+CM(3,k));	% les carrés magiques
     n4=cm-(CM(1,k)+CM(3,j));
     l1=cl-(LM(1,j)+LM(1,k));
     l2=cl-(LM(3,k)+LM(3,j));
     l3=cl-(LM(1,j)+LM(3,k));
     l4=cl-(LM(1,k)+LM(3,j));
     sol=[n1 n2 n3 n4 l1 l2 l3 l4];
     if (sol>0)&(sol<=maxn)&(sol~=CM(2,j))
      if all(sol(5:8)==logo(sol(1:4)))
		nbca=nbca+1;
		% solutions en chiffre
        solch=[CM(1,j) n3 CM(3,k); ...
             n1 CM(2,j) n2; ...
             CM(1,k) n4 CM(3,j)];
		sollo=[LM(1,j) l3 LM(3,k); ...
		      l1 LM(2,j) l2; ...
		      LM(1,k) l4 LM(3,j)];
		% solutions en lettres
		soll=[Nb(CM(1,j),:) Nb(n3,:) Nb(CM(3,k),:); ...
             Nb(n1,:) Nb(CM(2,j),:) Nb(n2,:); ...
             Nb(CM(1,k),:) Nb(n4,:) Nb(CM(3,j),:)];
		disp('')
		disp(['No. ',int2str(nbca)])
		%disp([int2str(solch),[' ';' ';' '], soll, int2str(sollo)])
		affichesol(solch,sollo,soll)
      end
     end
    end
   end
 end
end

