Fórum PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Problema em linguagem C

2 participantes

Ir para baixo

Problema em linguagem C Empty Problema em linguagem C

Mensagem por marcelomendes1 Qua 18 Out 2017, 14:28

Meu professor deu esse problema em uma lista de exercicicios de do while,while e for e eu não consegui resolve-lo, gostaria que me ajudassem.

Escreva um programa que, dados dois números naturais N1 e N2, imprima todos os números primos existentes entre ambos.
marcelomendes1
marcelomendes1
Recebeu o sabre de luz
Recebeu o sabre de luz

Mensagens : 137
Data de inscrição : 22/06/2016
Idade : 22
Localização : São Paulo

Ir para o topo Ir para baixo

Problema em linguagem C Empty Re: Problema em linguagem C

Mensagem por Melkor256 Qua 18 Out 2017, 19:13

Código:
#include <stdio.h>

int main()
{
    //Supondo um intervalo fechado [n1,n2]
    int n1,n2;

    scanf("%d %d",&n1,&n2);

    int i = n1;

    while(i != n2+1)
    {
        int j = 2;

        if(i == 2)
            printf("2 ");
        else if(i != 1)
        {
            while(j*j <= i) //******//
            {
                if(i % j == 0)
                {
                    j = -1; // Logo, NÂO PRIMO
                    break; //quebrando o while
                }
                j++;
            }
            if(j != -1)
                printf("%d ",i);
        }
        i++;
    }

    return 0;
}

Na linha com vários asteriscos há também a possibilidade de parar somente quando j < i, while(j < i). Contudo, da forma que eu fiz o tempo de execução deixa do laço deixa de ser N-1 e passa a ser sqrt(N);

Lembrando, se N é um número composto (Não primo) então esse possui algum divisor d <= sqrt(N)!

Ex.: N = 9 = 3 * 3, possui um divisor d <= sqrt(9) <= 3, d pertence a {1,2,3}
Ex.: N = 7, não é possível fatorá-lo em com mais de um número primo, logo, não existe um divisor d <= sqrt(7)
Ex.: N = 3,  Idem
Ex.: N = 10 = 2 * 5 .:. Existe um d <= sqrt(10), d pertence a {1,2,3}

Melkor256
iniciante

Mensagens : 6
Data de inscrição : 19/08/2017
Idade : 23
Localização : Recife

Ir para o topo Ir para baixo

Problema em linguagem C Empty Re: Problema em linguagem C

Mensagem por marcelomendes1 Qua 18 Out 2017, 21:07

@Melkor256 escreveu:
Código:
#include <stdio.h>

int main()
{
    //Supondo um intervalo fechado [n1,n2]
    int n1,n2;

    scanf("%d %d",&n1,&n2);

    int i = n1;

    while(i != n2+1)
    {
        int j = 2;

        if(i == 2)
            printf("2 ");
        else if(i != 1)
        {
            while(j*j <= i) //******//
            {
                if(i % j == 0)
                {
                    j = -1; // Logo, NÂO PRIMO
                    break; //quebrando o while
                }
                j++;
            }
            if(j != -1)
                printf("%d ",i);
        }
        i++;
    }

    return 0;
}

Na linha com vários asteriscos há também a possibilidade de parar somente quando j < i, while(j < i). Contudo, da forma que eu fiz o tempo de execução deixa do laço deixa de ser N-1 e passa a ser sqrt(N);

Lembrando, se N é um número composto (Não primo) então esse possui algum divisor d <= sqrt(N)!

Ex.: N = 9 = 3 * 3, possui um divisor d <= sqrt(9) <= 3, d pertence a {1,2,3}
Ex.: N = 7, não é possível fatorá-lo em com mais de um número primo, logo, não existe um divisor d <= sqrt(7)
Ex.: N = 3,  Idem
Ex.: N = 10 = 2 * 5 .:. Existe um d <= sqrt(10), d pertence a {1,2,3}
Não entendi muito bem seu programa kkkkk, não deveria ser unsigned int por causa que são numeros naturais? Além disso, não devia ter um printf falando pra digitar os dois numeros naturais? Eu coloquei seu programa no codeblocks e não deu um resultado :/
marcelomendes1
marcelomendes1
Recebeu o sabre de luz
Recebeu o sabre de luz

Mensagens : 137
Data de inscrição : 22/06/2016
Idade : 22
Localização : São Paulo

Ir para o topo Ir para baixo

Problema em linguagem C Empty Re: Problema em linguagem C

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissão neste fórum:
Você não pode responder aos tópicos