2
The program has to do a check of prime numbers, where the user type a number and the program finds the largest prime number before it. the problem with my program is that it doesn’t check until the end, for example, if I write 10 should find 7 but it finds 5 always 5.
#include <stdio.h>
#include <stdlib.h>
/*.
.
.
7)receber um numero inteiro e falar o maior numero primo que seja o anterior a este*/
int main()
{
int opc;/*1-switch*/
int numA=0, numB=0, numC=0, soma, aux=0; /*variaveis para calculos*/
int i, j;/*contadores*/
int vet[10];/*vetores inteiros*/
float media;/*variaveis para calculos*/
printf("escolha qual exercicio quer executar:\n7)Ex7\n");
scanf("%i", &opc);
fflush(stdin);
system("cls");
switch(opc)
{
/*.
.
.
*/
case 7:
printf("digite um numero:\t");
scanf("%i", &numA);
/*inicio da fase de processamento*/
numB=1; /*para dar inicio ao calculo de achar numero primos por tentativas*/
numC=0;
j=0;/*reset do contador*/
int cont=0, y, aux2=0;
if(numA==0 || numA==1 || numA==2)
{
printf("%i nao tem numero primo, anterior a ele.", numA);
break;
}else
{
for(i=0; i<numA; i++)
{
aux=cont/2;
for(y=0; y<aux; y++)
{
numC=cont%numB;/*faz divisao modular da variavel de entrada com numB=1*/
fflush(stdin);
if(numC==0)/*verifica se resultado deu 0*/
j=j+1;/*se sim armazena em j um marcador +1/+1*/
numB=numB+1;/*e soma 1 ao numB para acompanhar o valor de aux*/
}
fflush(stdin);
if(j==1)
{
aux2=cont;
}
cont=cont+1;
j=0;/*reset do contador*/
printf("\n\n\n[%d]\n\n\n", aux2);/*verificação de variavel*/
printf("\n\n\n%d\n\n\n", cont);
}
printf("%d eh o maior numero primo antes de %i", aux2, numA);
}
/*fim da fase de processamento*/
break;
default:
break;
}
return 0;
}
SOLUTION FOUND
/*inicio da fase de processamento*/
for(i=0; i<numA; i++)
{
aux=numA-1;/*subtraio 1 ao numero original*/
if(comPrimos(aux)==true)/*mando para uma função o valor armazenado na aux para verificar se é primo*/
{/*se for verdadeiro faça*/
printf("%d eh o maior numero primo antes de %i", aux, aux2);
break;/*quebrar para sair do for*/
}
numA=aux;
}
/*fim da fase de processamento*/
FUNCTION
int comPrimos(int prim)
{
int i, aux, B, j=0;
aux=prim/2;
int A=1;
for(i=0; i<aux; i++)
{/*verificação por tentativas de divisão modular*/
B=prim%A;
if(B==0)
j=j+1;
A=A+1;
}
fflush(stdin);
system("cls");
if(j==1)
return true;
else
return false;
}
Allow me a hint: start by writing a function that checks if a number is prime. Then call this function with the value typed minus one. If the function returns
true
found the result if not subtract 1 and call the function again. Do this until the function returnstrue
– ramaral
thanks saw @ramaral
– Leonardo V. De Gasperin