Ir ao conteúdo
  • Cadastre-se

VisualG Algoritmo para testar se o número é primo e mostrar o primo anterior


Posts recomendados

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

Crie esse algoritmo porém quero mostrar, todos os números primos e mostrar o primo anterior a ele como deveria ser feito?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Irwing Seiji Ato seu código está bom , mas também poderia  ser  assim  :

 

Algoritmo "NumerosPrimos"
Var
  Fatorial,Numero,x : Inteiro
  Primo,Resposta,y  : Inteiro
  Flag : Logico
inicio
  Limpatela
  Mudacor("Amarelo","Frente")
  Escreva("Deseja até que número primo: ")
  leia(Numero)
  Escreval
  Escreval
  Para Primo de 2 ate Numero faca
    Fatorial<- 2
    Flag <- Falso
    enquanto (Primo<>fatorial) faca
      Resposta <- Primo MOD Fatorial
      Fatorial <- Fatorial + 1
      se Resposta = 0 entao
         Flag <- Verdadeiro
      fimse
    fimenquanto
    se (Nao Flag) entao
      escreva(Primo," ")
      se numero = primo entao
        y:=1
      fimse
      se y=0 entao
        x := primo // antepenúltimo número primo no intervalo
      fimse
    fimse
  fimpara
  escreval
  se y=1 entao
    escreval("O Número Primo Anterior A",numero," éh ",x)
  fimse
  Escreval
Fimalgoritmo

 

 

Link para o comentário
Compartilhar em outros sites

@devair1010O código ficou bom mas contém um erro o número 1 não é primo e preciso otimizá-lo ainda para ficar mais eficiente gostaria de quando você múltiplo de um número já removesse da contagem e passasse para o próximo número, pois quando é múltiplo já não é mais primo pois somente precisa ter 2 divisores exatos que no caso seria o 1 e o número digitado, a e outra falha no algoritmo tem que ser um número primo anterior e caso o número digitado seja primo deve informar o número primo anterior a este digitado

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Agora mostra o primo anterior caso o número seja primo porém não mostra o primo anterior, porém quando não é primo mostra dois números primos anteriores preciso que mostra somente 1 número anterior.

E também precisa remover o múltiplos de todos os números para otimizar o código para assim ir para outro caso seja múltiplo de um número

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010Acho que  para otimizar se fosse múltiplo seria muito custoso acho que seria melhor dar um break quando fatorial fosse 2 e para parar de fazer a divisão que no caso faria até o número digitado e caso fatorial fosse 2 dividiria o número digitado por ele mesmo e somaria no fatorial e se não fosse continuaria o mesmo procedimento, porém ainda assim o código precisa ser melhorado essa parte do caso o número fosse primo precisa melhorar pois dividiria até o número digitado seria bom se removesse os múltiplos mesmo

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Irwing Seiji Ato      no seu primeiro post você disse :

 

Em 11/03/2019 às 08:49, Irwing Seiji Ato disse:

Crie esse algoritmo porém quero mostrar, todos os números primos e mostrar o primo anterior a ele

então editei o código acima , para que ele imprima o primo anterior se o número digitado for primo , e se não for então não imprime nada ,  mas os múltiplos não precisam ser removidos basta não imprimi-los .

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...