If you can not use vectors, which would be the best solution to the problem, you can pass the cipher checking logic into the while
that reads the numbers.
You can also make some adjustments to the cousin's own verification loop, which makes it simpler and more efficient:
printf ("Quantos número deseja ser informado: ");
scanf ("%d", &quantidade);
for (q=1; q<=quantidade; q++)
{
printf ("Digite um número: ");
scanf ("%d",&num);
//a lógica de verificação do primo vem agora aqui, à medida que lê cada numero
primo=0;
//agora começa em 2 e termina em num-1, verificando menos 2 elementos sempre
for (a=2; a<num; a++)
{
if(num % a == 0){
primo++;
break; //se deu para dividir por um já não precisa de ver mais
}
}
//agora testa com 0 e não 2 devido ao ajuste do for
if (primo == 0) printf ("%d É PRIMO.\n", num);
else printf ("%d NÃO É PRIMO.\n", num);
}
See the Ideone example
Organization with functions
It would be better to organize the cousin's verification logic in a separate function:
int ePrimo(int n){
int a;
for (a=2; a<n; a++)
{
if(n % a == 0){
return 0; //agora fica mais simples pois basta retornar
}
}
return 1; //se chegou ao fim é primo
}
int main ()
{
int num, q, quantidade;
setlocale(LC_ALL, "Portuguese");
printf ("Quantos número deseja ser informado: ");
scanf ("%d", &quantidade);
for (q=1; q<=quantidade; q++)
{
printf ("Digite um número: ");
scanf ("%d",&num);
//aqui agora apenas mostra o resultado da função ePrimo
printf("%d %s.\n",num, ePrimo(num)? "É PRIMO": "NÃO É PRIMO");
}
return 0;
}
See this example also in Ideone
Efficiency checks on Primo
Just as @JeffersonQuesado indicated in the comments, he still has room to improve the part of the cousin's search with some specific changes:
- Search only while the current number is less than or equal to the square root of the boundary, since from there we have a guarantee that there will be no divisible.
- If the number is not even and therefore is not divisible by 2, it will not be divisible by any other pair.
Considering these improvements the verification function would look like this:
int ePrimo(int n)
{
if (n % 2 == 0) return 0; //se for pair sai logo como não primo
int a, limite = sqrt(n); //calcula o limite com a raiz quadrada do numero
for (a=3; a<=limite; a+=2) //agora anda de 2 em 2 excluindo todos os pares
{
if(n % a == 0)
{
return 0; //agora fica mais simples pois basta retornar
}
}
return 1; //se chegou ao fim é primo
}