Ir ao conteúdo

Posts recomendados

Postado

Boas pessoal, tenho uma dúvida e não sei mesmo como fazer.

Tenho que fazer um programa que leia, do seu standard input (teclado), uma sequência de naturais e que escreva, no seu standard output (consola), o número de factores primos, não necessariamente distintos, de cada um desses naturais.

 

Entrada (Input)

A primeira linha da entrada do programa contém um valor inteiro, N, que corresponde ao número de naturais da sequência. Cada uma das N linhas seguintes contém um natural, ni, que é o i-ésimo elemento da sequência.

 

Saída (Output)

A saída do programa consistirá em tantas linhas quantos os elementos da sequência. Cada uma das linhas terá a forma:

<natural>: <número-de-factores-primos>

onde, na i-ésima linha, <natural> é o i-ésimo natural da sequência e <número-de-factores-primos> é o número de factores primos desse natural.

 

Exemplo 1

 

Entrada

3

20

0

100000000

 

Saída

20: 3

0: 0

100000000: 16

  • Curtir 1
Postado
2 horas atrás, luana1 disse:

@devair1010 é um exercicio da minha escola, não sei

 

adicionado 22 minutos depois

É trabalho de casa, mas não estou a perceber

 

tenho um pouco de código, só que só funciona para um

 

  • Curtir 1
Postado

postei aqui --- no ano pasado --- nesse forum duas soluções para números primos que pode adaptar para esse exercicio, afinal basta contar os fatores. Uma usava o crivo de eratostenes e a outra era convencional. pode pesquisar aqui por esse tema

  • Curtir 1
Postado

@devair1010 Exatamente! Há anos vi algo muito parecido também já aqui, no URI e na escola.

 

Em 15/02/2020 às 16:04, luana1 disse:

tenho um pouco de código, só que só funciona para um

@luana1 Ótimo, assim não perde tempo discutido um método , só a adaptação do já adotado.

 

  • Curtir 1
Postado

 

O programa que postei meses atrás tinha uma função

unsigned int    proximo_primo(unsigned int n);

E como dá pra imaginar ela retorna o próximo primo a cada chamada. É praticamente a solução para o seu problema, já que pode usar isso para ir fatorando seu número e contando o número de fatores primos e pronto...

 

Pode ler a discussão lá.

 

Para resumir aqui abaixo tem o mínimo do código. Funciona direitinho. É só matemática afinal.

 

Se não entendeu como isso se aplica ao seu problema, escreva de novo

 

int                retorna_um_se_primo(unsigned int n)
{
    if (n < 2)        return 0;
    if (n == 2)        return(1);
    if (n % 2 == 0) return(0);
    unsigned int maior = (unsigned int)sqrt((double)n);
    unsigned int fator = 3;
    while (fator <= maior)
    {
        if (n % fator == 0) return 0;
        fator += 2;
    }    // end while
    return 1;
}    // end retorna_zero_se_primo()


unsigned int    proximo_primo(unsigned int n)
{
    static int     iniciado = 0;
    static int     proximo = 0;

    if (n == 0)                        // inicia a serie
    {
        iniciado = 1;
        proximo = 2;
        return 1;
    }    // end if

    if(iniciado == 0) return 0;        // erro: tem que chamar com 0 antes

    if (proximo == 2)
    {
        proximo = 1;
        return 2;
    }    // end if

    // normal: a a partir daqui retorna o proximo primo
    for (int i = proximo+2;;i += 2)
        if (retorna_um_se_primo(i))
        {
            proximo = i;
            return proximo;
        }    // end if
}    // end proximo_primo()

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