Deste modo, vamos para um segundo exemplo de algoritmo que deve listar todos os números naturais primos até um n qualquer. Antes de prosseguir, procure pensar em: como você resolveria esse problema?

Pois bem, a primeira pessoa que se tem notícias que produziu tabelas de números primos foi uma pessoa chamada de Eratóstentes que viveu no terceiro século a.c (276 - 194) na Grécia antiga.

Eratóstenes criou um método, atualmente chamado de algoritmo, que possui a seguinte ideia: inicialmente ele escrevia um tabela com todos os números naturais de 1 à n, sendo que, neste caso, para simplificar o tamanho da tabela, 'n' estará valendo 120. Contudo, lembre-se que 'n' pode ser qualquer número natural maior que 1. Em seguida, escolhia o primeiro primo 'p' que, como já sabemos, é o número 2 e, consequentemente, eliminavam-se da lista todos os seus múltiplos. Observe que isso elimina metade dos números no intervalo de 1 à n escolhido. Depois escolhia o próximo número 'p' que ainda não tinha sido eliminado e, consequentemente, também eliminavam-se todos os seus múltiplos. Esse procedimento era executado até que p2 ≤ n, e, consequentemente, a tabela contivesse apenas números primos. Observe que essa condição de parada é verdadeira pois não é preciso verificar todos os número no intervalo de 1 à 'n' uma vez que todos os números não primos são compostos e, consequentemente, podem ser reescritos em função de seus fatores primos. Mais tarde, esse algoritmo foi batizado como sendo o "crivo de Eratóstenes".

A partir desse procedimento podemos simplificar a descobertas de primos usando o lema : Se um número natural n > 1 não é divisível por nenhum primo p tal que p2 ≤ n, então ele é primo. Este lema fornece um teste de primalidade, pois, para verificar se um dado número n é primo, basta verificar que não é divisível por nenhum p que não supere √n.

Este algoritmo inventado por Eratóstenes pode ser escrito também sob a forma de portugol, conforme demonstrado no exemplo abaixo:

	Declara vetor de reais valores[120];
	Declara inteiro maximo=120;
	Declara inteiro i;

	Inicio

	    para i de 0 a maximo faça
	        valores[ i ] ← i
	        i ← i + 1
	    fim_para

	    valores[0] ← 0
	    valores[1] ← 0

	    i ← 2

	    enquanto i^2 <= máximo faça
	        
	        se valores[ i ] != 0 então
	               eliminarPrimos( valores[ i ] )
	        fim_se
	      
	        i ← i + 1
	    
	    fim_enquanto

	Fim

	Função eliminarPrimos(inteiro i)

	    Declara inteiro j

	    j ← 2 * i;

	    enquanto j <= máximo faça
	        valores[ j ] ←0
	         j ← j + i;
	    fim_enquanto

	fim_eliminarPrimos
				
			

Observe que, tanto o algoritmo do exemplo anterior quanto este, são exemplos introdutórios da chamada programação estruturada, que consiste em organizar a ideia em termos de tipos/variáveis, estruturas de sequencia, decisão e repetição além de procedimentos/funções. Existe, portanto, uma separação muito bem definida entre dados (variáveis) e código (demais elementos).

Copyright © 2014 AIEC.