function c=ndivisori(n) % Restituisce il numero di divisori primi del numero n. % Esempio: % >> ndivisori(12) % 2 % Comincia costruendo la lista dei primi minori di n con il crivello % di Eratostene. P=ones(1,n); P(1)=0; for j=2:sqrt(n) if P(j)==0 continue end for s=2*j:j:n P(s)=0; end end P=P.*[1:n]; P=setdiff(P,0); % Adesso P contiene la lista dei numeri primi minori di n. % Contiamo i divisori primi di n usando una variante dell'algoritmo di % fattorizzazione (invece di accumulare i divisore in una lista, ci % limitiamo ad incrementare una variabile). c=0; % Variabile che conta i divisori trovati. for p=P if mod(n,p) == 0 % Trovato un divisore. c=c+1; n=n/p; % Dividiamo n per la massima potenza possibile di p. while mod(n,p)==0 n=n/p; end end end