Jump to content
GeniousMan

Primos inferiores a número dado

Recommended Posts

GeniousMan

Estou a iniciar a minha aprendizagem na linguagem C, e queria saber como faço para ler um número inteiro e determinar todos os números primos iguais ou inferiores a esse número.

Na alinea anterior pedia so para determinar se 1 numero inserido pelo utilizador era primo ou nao, e resolvi da seguinte forma.

void primos(){
    int n,i,div=0;
    printf("Digite 1 numero:");
    scanf("%d",&n);
    if(n>1){
        for(i=1;i<=n;i++){
            if(n % i ==0) div++;
        }
        if(div == 2){
            printf("O numero %d e primo",n);
        }
        else{
            printf("O numero %d nao e primo",n);
        }
    }
}

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

O teu problema é muito simples, e a razão dele é porque ainda não estás habituado a abordar um problema na filosofia "divide to conquer".

Olhando para a função que apresentas, o que vejo é uma função que faz tudo, e não uma função que faz somente uma única coisa : verificar se um número é primo.

Se eu dividir o teu código como deve ser, achas que consegues completar o teu exercício ?

unsigned int pedirUmValor() {
    unsigned int n;

    do {
        printf("Digite 1 numero:");
        fflush(stdout);
        fflush(stdin);
    } while (!scanf(" %u", &n));

    return n;
}

int validarPrimo(unsigned int n) {
    int div = 0;

    for(i = 1; i <= n; i++) {
        if(n % i ==0)
            div++;
    }

    return div > 2;
}

void main() {
    unsigned int u;

    u = pedirUmValor();

    printf("O numero %d%se primo", u, validarPrimo(u) ? " " : " nao ");
}

 

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
GeniousMan

Boa noite, o programa que colocou aqui continha 1 pequeno erro, todos os numeros que eram primos ele dizia que nao eram e vice-versa. Isso deve-se a ter colocado return div>2, e para dar o resultado correcto tem de ser return div==2;

Voltando a questao que coloquei, voltei a pegar hoje neste exercicio e ainda nao o consegui resolver. O programa faz o 1 teste correcto mas o numero que vem a seguir diz sempre que o numero nao e primo 

Share this post


Link to post
Share on other sites
GeniousMan
int imprimirprimos() {
    int n, i,div = 0;
    printf("Digite 1 numero:");
    scanf("%d", &n);
    if (n > 1) {
        for (div>0; div<=n; n--) {
            for (i = 1; i <= n; i++) {
                if (n % i == 0) div++;
            }
            if (div == 2) {
                printf("O numero %d e primo\n", n);
            }
            else (div!=2);
                printf("O numero %d nao e primo\n",n);
        }
        }

    }

Este é o codigo actualizado, penso estar a cometer 1 erro grave mas nao consigo descobrir onde.

Edited by GeniousMan

Share this post


Link to post
Share on other sites
HappyHippyHippo

então eu dividi o código em funções e tu simplesmente ignoraste a dica ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.