Ir ao conteúdo

Posts recomendados

Postado

Oi, boa tarde. Estou tentando implementar um algoritmo de números primos em linguagem C, com funções. O enunciado do exercício é esse:

(a) Escreva uma função que verifique se um número natural é primo.

 

(b) Caracterizar os dígitos de um número inteiro. Um número é considerado super primo se além de ser primo, todos os seus dígitos são primos, também. Primo se apenas o número em si for primo, e nada, se ele não for primo.

Entrada:                          Saída:

23                                    super

33                                    nada

43                                    primo

 

Por enquanto fiz a primeira parte (a), para verificar se qualquer número é primo, porém estou com dificuldade para implementar a segunda parte, onde é necessário separar os dígitos para depois verificar. Se alguém puder me ajudar, agradeço.

#include<stdio.h> // PROGRAMA INCOMPLETO //
#include<stdlib.h>

int primo();

int main()
{
   int n;

   printf("Entre com um numero: ");
   scanf("%d", &n);

   n = primo(n);

   if(n == 1)
    printf("Eh primo");
   else
   {
       printf("nao eh primo");
   }

return 0;
}

int primo(int numero)
{
    if(numero == 0 || numero == 1)
    {
        return 0;
    }

    int p = 0;
    
    for(int cont = 2; cont <= numero; cont++)
    {
        if(numero % cont == 0)
        {
            p++;
        }
    }
    if(p == 1)
    {
        return 1; // PRIMO //
    }
    else
    {
        return 0; // NAO PRIMO //
    }

return 0;
}

 

  • Curtir 1
Postado

Para decompor um número decimal e sua unidades bases, basta dividir o número por até q 0, multiplicar o quociente inteiro pela base e subtrair do número anterior.

 

Para determinar o resto de uma divisão inteira existe o operador % mudulos.

Seja 1235 esse número, então     

        1235 / 10 = q 123 r 5 

          123 / 10 = q 12   r 3 

            12 / 10 = q 1     r 2 

              1 / 10 = q 0     r 1

 

Postado
3 minutos atrás, AnsiC disse:

Para decompor um número decimal e sua unidades bases, basta dividir o número por até q 0, multiplicar o quociente inteiro pela base e subtrair do número anterior.

 

Para determinar o resto de uma divisão inteira existe o operador % mudulos.

Seja 1234 esse número, então     

        1235 / 10 = q 123 r 5 

          123 / 10 = q 12   r 3 

            12 / 10 = q 1     r 2 

              1 / 10 = q 0     r 1

 

Mas caso o usuário escreva um número com muitos dígitos, como ficaria?

Postado
1 minuto atrás, Adrian Simon disse:

Mas caso o usuário escreva um número com muitos dígitos, como ficaria?

Não faz diferença, o laço de decomposição só vai parar quando a variável q de quociente for igual a 0. Disso a variável r de resto tem o último dígito enquanto q tem 0 finalizando o laço.

Postado
1 hora atrás, AnsiC disse:

 Não faz diferença, o laço de decomposição só vai parar quando a variável q de quociente for igual a 0. Disso a variável r de resto tem o último dígito enquanto q tem 0 finalizando o laço.

Nesse caso eu teria que criar um laço for?

 

Postado

@Adrian Simon essa função aqui deve ajudar você, faz o que o @AnsiC te disse, e usa a função que você criou para verificar se é primo.

int superPrimo(int num){

    int p=0, x=0;

       while(num>0){
        if(primo(num%10)) p++; //utilizando sua funcao p/ comparar se o numero é primo, se sim p++
        num/=10;
        x++; //essa incrementação é para pegar o tamanho do numero
      }

    return (p==x) ? 1 : 0; 
  //se p for igual x significa que todos numeros foram primos, retornando 1
  //se nao, retorna 0, que significa que o numero é somente primo
  //obs: so chame essa função depois de comparar se o numero é primo
}

 

  • Obrigado 1
Postado

@Asrety Adaptei, respeitando a essência, sua solução/ que já é boa /para retorna imediatamente

 

Senão é primo um dos algarismos.

int superPrimo( int numeral )
{ while( numeral )
  { if( primo(numeral % 10) )numeral/= 10;
    else return( 0 );
  }
  return( 1 ); 
}

 

  • Curtir 1
Postado
agora, AnsiC disse:

@Asrety Adaptei, respeitando a essência, sua solução/ que já é boa /para retorna imediatamente

 

Senão é primo um dos algarismo.


int superPrimo( int numeral )
{ while( numeral )
  { if( primo(numeral % 10) )numeral/= 10;
    else return( 0 );
  }
  return( 1 ); 
}

 

Bem melhor, pois se achar um não primo, logo não será super primo, coisa que não pensei quando fiz, gostei da sua resolução.

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...