Na lista de exercícios da disciplina de algoritmo tem a seguinte questão:
Fazer um programa que leia um numero digitado pelo usuário e exibir uma mensagem informando se o numero digitado é primo ou não.
Bem, números primos são aqueles que são divisíveis somente por ele mesmo e por um, a partir dessa afirmação já podemos formular algumas perguntas para montar a lógica da questão: Como saber se um numero é divisível por ele mesmo e por um? Como saber se ele não divisível pelos demais números? Uma das formas de se responder a essas perguntas seria pegar esse numero e dividi-lo por ele mesmo e depois por todos os números antecessores a ele até chegar a um (ou começar do um até chegar ao numero). Dessa forma podemos ver todos os divisores desse numero (aqueles números os quais a divisão não deixa resto) e depois contá los, como o numero primo só tem como divisor ele mesmo e um, então se o numero tiver somente dois divisores ele é primo, se tiver mais de dois, não é primo. No visualg ficou assim:
algoritmo "NumerosPrimos"
// Função : Verificar se um numero é primo ou não.
// Autor : Eliel
// Data : 09/03/2017
// Seção de Declarações
var
numero, i, cont :inteiro
inicio
escreval("digite um numero: ")
leia(numero)
para i de 1 ate numero faca
se numero mod i = 0 entao
cont <- cont+1
fimse
i <- i+1
fimpara
se cont = 2 entao
escreval("o numero", numero," e primo!")
senao
escreval("o numero", numero," NAO e primo!")
fimse
fimalgoritmo
Nesse algoritmo foi usada a variável 'i' para representar os números antecessores do numero digitado e a variavel 'cont' para contar o numero de divisores do numero digitado. Esse algoritmo pode ser melhorado, de forma que mostre quais são os divisores do numero digitado:
algoritmo "NumerosPrimos"
// Função : Verificar se um numero é primo ou não.
// Autor : Eliel
// Data : 09/03/2017
// Seção de Declarações
var
numero, i, cont :inteiro
inicio
escreval("digite um numero: ")
leia(numero)
escreval("os divisores do numero ",numero," sao: ") // apresentar os divisores
para i de 1 ate numero faca
se numero mod i = 0 entao
escreva(" ",i) // exibir na tela os divisores
cont <- cont+1
fimse
i <- i+1
fimpara
escreval() // pular
se cont = 2 entao
escreval("o numero", numero," e primo!")
senao
escreval("o numero", numero," NAO e primo!")
fimse
fimalgoritmo
Esse algoritmo roda bem com números não muito grandes, porém se o usuário digitar, por exemplo, 12000 ou um numero maior o visualg já demora um pouco para executar, isso por que no loop (comando para) vai ser executado um numero maior de passos, um custo maior de processamento. Então um possível solução seria diminuir o numero de antecessores, pois se o usuário digitar 12000, será feita 12000 divisões, mas dentro do intervalo de 1 a 10 podemos dividir todos o números "grande" por todos os números do intervalo para encontrar alguns divisores, mas se for encontrado apenas um divisor, o numero 1, então esse numero "grande" é um numero primo, mas isso é só um "jeitinho" que funcionou com alguns números:
algoritmo "NumerosPrimos"
// Função : Verificar se um numero é primo ou não.
// Autor : Eliel
// Data : 09/03/2017
// Seção de Declarações
var
numero, i, cont :inteiro
inicio
escreval("digite um numero: ")
leia(numero)
se numero = 1 entao
escreval("o numero ",numero," NAO e primo!")
senao
escreval("os divisores do numero ",numero," sao: ")
se numero <= 10 entao // se o numero for ate 10 divide pelos antecessores:
para i de 1 ate numero faca
se numero mod i = 0 entao
escreva(" ",i)
cont <- cont+1
fimse
i <- i+1
fimpara
senao // sefor maior que 10 divide pelos antecessores de 1 a 10:
para i de 1 ate 10 faca
se numero mod i = 0 entao
escreva(" ",i) // só deve achar um divisor: o numero 1
cont <- cont+1 // cont vai ter valor 1
fimse
i <- i+1
fimpara
cont <- cont+1 // aumentar para poder exibir a mensagem
escreva(numero) // para exibir o próprio numero depois do 1
fimse
escreval() // pula um linha
se cont = 2 entao
escreval("o numero", numero," e primo!")
senao
escreval("o numero", numero," NAO e primo!")
fimse
fimse
fimalgoritmo
gostei muito,,,,,,estava mesmo sem ideia
ResponderExcluirMe ajudou bastante!! Obrigado abraços
ResponderExcluirAjudou muito
ResponderExcluirShow de bola!!!
ResponderExcluirNão precisa de um contador. Divide de 2 até "numero-1". Se der qualquer divisão com resto zero, sobe uma flag e interrompe o loop.
ResponderExcluirBom dia. Pensei assim também, mas como sou iniciante nem imagino como subir essa flag.
ExcluirFazer o loop olhar para dentro da variável resultadoMod e se encontrar um zero, então parar o loop.
obrifgado
ResponderExcluirObrigado pela ajuda e força pr ai...
ResponderExcluirÉ possível fazer um código que mostre todos os números primos entre 1 e n ?
ResponderExcluirClaro!
Excluircomo?
ExcluirAlgoritmo "Algoritmo para numero primo
Excluir"
// Disciplina : [Linguagem e Lógica de Programação]
// Professor :
// Descrição : Aqui você descreve o que o programa faz! (função)
// Autor(a) : Nome do(a) aluno(a) Charlestom Macre
// Data atual : 23/10/2021
Var
a,b,c,i,n1,n2,p:inteiro
Inicio
escreval ("- Programa para indentificar números primos.")
escreval ()
escreva("Digite o primeiro valor: ")
leia (n1)
escreva("Digite o segundo valor: ")
leia (n2)
se (n1 > n2) entao
a <- (n2)
b <- (n1)
senao
a <- (n1)
b <- (n2)
fimse
escreval ()
escreval ("Os valores primos entre ",a," e",b," são: ")
para c de a ate b faca
p <- 0
para i de 1 ate c faca
se (c mod i =0)entao
p <- p+1
fimse
fimpara
se (p=2) entao
escreva (c)
fimse
fimpara
escreval()
escreval ("______________________________________")
Fimalgoritmo
Obrigado
ResponderExcluirsalvou
ResponderExcluir