Implemente a interface acima, para gerar números primos até um dado
número n, usando o crivo de Erastótenes:
Explicação do Algoritmo
Para exemplificálo,
vamos determinar a lista de números entre 1 e 30.
* Inicialmente, determinase
o maior número a ser checado. Ele
corresponde à raiz quadrada do valor limite, arredondado para baixo. No
caso, a raiz de 30, arredondada para baixo, é 5.
* Crie uma lista de todos os números inteiros de 2 até o valor limite: 2
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30.
* Encontre o primeiro número da lista. Ele é um número primo, 2.
* Remova da lista todos os múltiplos do número primo encontrado. No
nosso exemplo, a lista fica: 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29.
* O próximo número da lista é primo. Repita o procedimento. No caso, o
próximo número da lista é 3. Removendo seus múltiplos, a lista fica: 2 3 5 7
11 13 17 19 23 25 29. O próximo número, 5, também é primo; a lista fica: 2 3
5 7 11 13 17 19 23 29. 5 é o último número a ser verificado, conforme
determinado inicialmente. Assim, a lista encontrada contém somente números
primos.
A primeira coisa é que você não implementou o Crivo de Eratóstenes - então vai ter nota zero. Você criou um método que determina se um número é primo (que funciona para números pequenos, mas não para números grandes) mas não implementou o crivo.
E
entanglement
O Crivo precisa de um array. Tem algum array na sua solução?
Mitnick8
e como faço para implementar esse Crivo?
Mitnick8
KKKKK, ops
pessoal houve um “errinho” aqui, está certo o programa como pede o exercício, a questão é essa
[quote]Implemente a interface acima, usando como teste de primalidade o método
das divisões sucessivas, explicado abaixo:
O mais simples dos testes de primalidade consiste em dividir um número n por
todos os números inteiros que estiverem na faixa que vai de 2 até n 1.
Se
n for divisível por qualquer um deles, então n é um número composto. Caso
contrário, é um número primo"
Esqueci de postar essa parte , foi mal pessoal…
edu_fernandes
Afinal qual a sua dúvida?
Mitnick8
Minha duvida é exatamente essa:
Implemente a interface acima, usando como teste de primalidade o método
das divisões sucessivas, explicado abaixo:
O mais simples dos testes de primalidade consiste em dividir um número n por
todos os números inteiros que estiverem na faixa que vai de 2 até n 1.
Se
n for divisível por qualquer um deles, então n é um número composto. Caso
contrário, é um número primo
Me da uma força aí parceiro.
drsmachado
Veja bem, você precisa limitar o for ao valor correspondente à raiz quadrada do mair número arredondado para baixo, certo?
Portanto, o for deveria ser limitado pelo valor dessa raiz…
Mitnick8
Mais o exercício pede que vá até o 30 mesmo, amigo, tem como me dar uma luz…
drsmachado
Bom, acho que “Para exemplificálo,
vamos determinar a lista de números entre 1 e 30.” e “Implemente a interface acima, para gerar números primos até um dado
número n”, pra mim, significa que o exercício deve suportar qualquer número.
eu faria assim
intvalorMax=Integer.parseInt(JOptionPane.showInputDialog("Valor limite"));intraiz=0;//modo tosco de descobrir a raiz:for(intr=1;r<valorMax;r++){if((r*r)<=valorMax){raiz=r;}}for(intg=0;g<=raiz;g++){if(isPrimo(g)){System.out.println(""+g);}}
edu_fernandes
[Removido]
edu_fernandes
Porém existe um problema.
Eu acho que você não está sabendo direito como o Crivo funciona.
Bom vamos a lógica do problema.
Afinal como funciona o Crivo de Erastótenes?
Bem, pegue lápis e papel.
Agora que conseguimos visualisar a proposta fica muito mais fácil.
Segue minha dica.
Sempre que tiver um problema, coloque-o no papel antes de qualquer coisa e organize a lógica. Apenas depois implemente.
Agora acredito que ficou muito mais fácil de fazer esse exercício.
Espero ter ajudado.
Abraço e boa sorte com o projeto.
renzonuccitelli
Estou aprendendo Python e li esse post. Aí resolvi implementar para treinar o crivo: