Language C - Prime numbers in vectors

4

I'm solving exercises, in C language, on vectors. The exercise is as follows:

Make a program that loads a vector of 10 integers, just show the prime numbers and their respective positions.

I have decided the exercise, but my code is only checking the first number.

 #include <stdio.h>

 #define VET 10

//Convenção verifica = 1 --> O numero é primo

//          verifica = 0 --> O numero não é primo
main()
{
    int n[VET],i;
    int d; // divisor
    int verifica; // verifica se o numero é primo.

    d=2;
    verifica=1;

    for(i=0; i<10 ;i++)
    {
        printf("\nDigite um numero:");
        scanf("%d",&n[i]);
        printf("O numero digitado foi: %d\n",n[i]);

        if (n[i] <= 1)
        verifica = 0;

            while(verifica == 1 && d <= n[i] / 2) 
             {
                if (n[i] % d  == 0)
                verifica = 0;
                d = d + 1;
             }

        if (verifica == 1)
        printf("%d eh primo.Sua posicao eh %d.\n", n[i],i);

    }

    return 0;   
    system("pause");
}

obs1: I used a code from another person, just to check if the number is prime or not.

    
asked by anonymous 09.07.2014 / 23:00

4 answers

2

You have generated an infinite loop so you can not continue to check the next numbers.

#include <stdio.h>
#include <locale.h> //para usar acentuação em português
#include <math.h> // utilizar a função de raiz quadrada (sqrt)
#define TAMANHO 10
//Convenção verifica = 1 --> O numero é primo
//          verifica = 0 --> O numero não é primo
main()
{
    setlocale(LC_ALL, "Portuguese");
    int n[TAMANHO] = {13,24,15,22,11,
                  19,18,23,25,47,};
    int d,i,limite;
    int verifica; // bandeira indicativa de verificação de numero primo.


    verifica=1;

    for(i=0; i<TAMANHO ;i++)
    {
        if (n[i] > 1) { //só verifica se o número for maior que 1
            d = 2;
            verifica = 1;
            limite = sqrt(n[i]); // determina o limite de busca de dividendos até a raiz quadrada do número analisado
            while(verifica && d <= limite) //laço de verificação
             {
               //se o número for divisível por d, este não é primo
                if (n[i] % d  == 0){ 
                    //define como não primo
                    verifica = 0;
                }
                //incrementa o número para testar
                d++;
             } 
            // imprime se primo
            if (verifica) // é o mesmo que verifica == 1
                printf("O número %d, na posição: n[%d] é primo.\n", n[i],i);
        }
    }
    return 0;   
}
    
09.07.2014 / 23:25
0

You were not restarting the values of d and verifica at each iteration of for , so your d continued to grow, and only worked the very first time. In addition, when I identified a non-prime number, from then on the verifica was zeroed in the next iterations.

Then do this:

Cut the lines:

  d=2;
  verifica=1;

And paste right at the beginning of for , which will work:

    
31.07.2014 / 18:47
0

I have based it on the program above, a program where the user says how many numbers he will provide and at the end shows how many numbers are given and how many are prime and which are prime.

#include <stdio.h> < stdio.h>
#include <locale.h> < locale.h>
#include <math.h> < math.h>

main()
{

    setlocale(LC_ALL, "Portuguese");

    int d,i,k,cont,defin;
    int teste;


    teste=1;
    cont=0;

    printf("**********************************************\n");
    printf("Informe quantos números serão informados:");
    scanf("%i", &k);
    printf("\n**********************************************");
    printf("\n\n\n");

    int n[k];

    for(i=0; i<k ;i++)
    {
        printf("\n");
        printf("Digite um numero:");
        scanf("%d",&n[i]);
        printf("O numero digitado foi: %d\n",n[i]);
        if (n[i] > 1) {
            d = 2;
            teste = 1;
            defin = sqrt(n[i]); 
            while(teste && d <= defin)
             {
                if (n[i] % d  == 0){ 
                    teste = 0;
                }
                d++;
             }
            if (teste==1){
                cont+=1;
                printf("O número %d é primo.\n", n[i]);
                printf("\n");
                        }
            else{
                printf("O número %d não é primo.\n", n[i]);
                printf("\n");
                }
        }
        else{
            if(n[i]==1)
                        {
                        printf("O número %d não é primo.\n", n[i]);
                        printf("\n");
                        }
            else
                {
                printf("O número %d não é positivo.\n", n[i]);
                printf("\n");
                }
            }
        }

    printf("\n\n\n");
    printf("**********************************************\n");
    printf("**********************************************\n");
    printf("CONCLUSÃO, De %i números digitados, %i são primos...\n",k,cont);
    printf("**********************************************\n");
    printf("**********************************************\n\n");

    for(i=0; i<k ;i++)
    {
        if (n[i] > 1) {
            d = 2;
            teste = 1;
            defin = sqrt(n[i]);
            while(teste && d <= defin)
             {
                if (n[i] % d  == 0){ 
                    teste = 0;
                }
                d++;
             }
            if (teste==1)
                printf("O número %d é primo.\n", n[i]);

                        }
    }
    printf("\n**********************************************\n");
    printf("**********************************************\n");
    printf("\n\n\n");
    system("pause");
    return 0;   
}
    
26.11.2014 / 06:31
0

// simple and accurate

#include <stdlib.h>
#include <stdio.h>

int main() { 
    int usuario[10],i;

    for (i=1;i<=9;i++) {
        do  {

            printf("digite o %d numero maior que um e que seja positivo.: ",i);
            scanf("%d",&usuario[i]);
        }
        while(usuario[i]<=1);
    }

    for (i=1;i<=9;i++) {

        if(usuario[i]==2) {
            printf("\nnumero %d sim e primo e esta na posicao %d do vetor\n",usuario[i],i);
        } else  if(usuario[i] %2==0) {
            printf("\nnumero %d nao e primo e esta na posicao %d do vetor\n",usuario[i],i);
        } else
            printf("\nnumero %d sim e primo e esta na posicao %d do vetor\n",usuario[i],i);
    }
}
    
15.10.2018 / 02:48