function r=primi3(N) % Calcola la somma di tutti i primi minori o uguali a N che hanno la % cifra delle unita' uguale a 3. % Esempio: % >> primi3(20) % ans = 16 % >> primi3(200) % ans = 1036 % Usiamo il crivello di eratostene. X=ones(1,N); X(1)=0; % I divisori "interessanti" j sono compresi tra 2 e radice di n. for j=2:sqrt(N) if X(j)==0 continue; % Se j non e' primo saltalo. end % Consideriamo i multipli di j, j escluso. for s=2*j:j:N X(s)=0; end end % Adesso X contiene il valore 1 in corrispondenza dei numeri primi e zero % altrove. Azzeriamo tutti queli che hanno la cifra delle unita' diversa % da 3. for i=1:N if mod(i, 10) ~= 3 X(i) = 0; end end % Adesso X contiene 1 soltanto in corrispondenza degli indici che ci % interessano. X=X.*(1:N); % Gli 1 vengono rimpiazzati con il valore dell'indice % (e gli altri restano 0). r=sum(X); % Basta sommare gli elementi di X per ottenere il risultato.