Estou precisando de ajuda para encontrar um erro no código fonte ,que está em C, do meu programinha para encontrar os números primos de 2 até 1000. Ao executa-lo o programa não desenvolve corretamente da linha 51 até 64. Ele somente calculcula até o numero primo 19, após isso ele mostra somente os primos até 19. Veja o código abaixo:
//calculo de numeros primos de 2 até 1000//
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
int primo, cont_primo, i, contador2, contador;
int poss_primos[400], nprimo[200];/*com um calculo rápido sabemos que temos 400 possiveis primos entre 2 e 1000*/
int resto;
poss_primos[0]=2;
poss_primos[1]=3;
poss_primos[2]=5;
poss_primos[3]=7;
nprimo[0]=2;/*numeros primos conhecidos*/
nprimo[1]=3;
nprimo[2]=5;
nprimo[3]=7;
cont_primo=7;
/*os quatros primeiros (for) colocam em um vetor os possiveis
numeros primos, aqueles que terminam em 9 , 7, 3 e 1*/
contador2=4;
for(contador=11; contador<1000; contador+=10)
{
poss_primos[contador2]=contador;/*salva todos os numeros terminados em 1*/
contador2=contador2+4;/*salva o poss_primos a cada 4 posições em um vetor (para o vetor ficar ordenado)*/
}
contador2=5;
for(contador=13; contador<1000;contador+=10)/*salva todos os numeros terminados em 3*/
{
poss_primos[contador2]=contador;
contador2=contador2+4;
}
contador2=6;
for(contador=17; contador<1000;contador+=10)/*salva todos os numeros terminados em 7*/
{
poss_primos[contador2]=contador;
contador2=contador2+4;
}
contador2=7;
for(contador=19; contador<1000;contador+=10)/*salva todos os numeros terminados em 9*/
{
poss_primos[contador2]=contador;
contador2=contador2+4;
}
for(contador=4;contador<200;contador++)/* atribui o valor 1 as posições ainda sem valor atribuido*/
nprimo[contador]=1;//até aqui está correto//
for(i=4; i<400; i++)/*numeros primos ainda não definidos*/
{
primo=1;
for(contador=0; contador < i; contador++)/*testa se o numero é primo*/
{
resto = poss_primos[i] % nprimo[contador];/*divide o possivel numero primo por todos os primos já encontrados*/
if (resto==0) primo=0;/*se pelo menos uma vez resto =0 o numero não é primo*/
}
if (primo==1)/*se o numero primo*/
{
cont_primo++;/*conta as posições do vetor nprimo, primeiramente cont_primo=7*/
nprimo[cont_primo]=poss_primos[i];/*passa o valor de poss_primos para o vetor nprimo (os numeros primos) */
}
}
for(contador=0; contador<200; contador++)
{
if(nprimo[contador]>1) printf("%d\n", nprimo[contador]);/*como não sabemos certo quantos numeros primos tem, se o valor não foi modificado não é mostrado*/
}
}
Pergunta
gabrielEM
Olá galera.
Estou precisando de ajuda para encontrar um erro no código fonte ,que está em C, do meu programinha para encontrar os números primos de 2 até 1000. Ao executa-lo o programa não desenvolve corretamente da linha 51 até 64. Ele somente calculcula até o numero primo 19, após isso ele mostra somente os primos até 19. Veja o código abaixo:
//calculo de numeros primos de 2 até 1000// #include <stdio.h> #include <stdlib.h> #include <math.h> main() { int primo, cont_primo, i, contador2, contador; int poss_primos[400], nprimo[200];/*com um calculo rápido sabemos que temos 400 possiveis primos entre 2 e 1000*/ int resto; poss_primos[0]=2; poss_primos[1]=3; poss_primos[2]=5; poss_primos[3]=7; nprimo[0]=2;/*numeros primos conhecidos*/ nprimo[1]=3; nprimo[2]=5; nprimo[3]=7; cont_primo=7; /*os quatros primeiros (for) colocam em um vetor os possiveis numeros primos, aqueles que terminam em 9 , 7, 3 e 1*/ contador2=4; for(contador=11; contador<1000; contador+=10) { poss_primos[contador2]=contador;/*salva todos os numeros terminados em 1*/ contador2=contador2+4;/*salva o poss_primos a cada 4 posições em um vetor (para o vetor ficar ordenado)*/ } contador2=5; for(contador=13; contador<1000;contador+=10)/*salva todos os numeros terminados em 3*/ { poss_primos[contador2]=contador; contador2=contador2+4; } contador2=6; for(contador=17; contador<1000;contador+=10)/*salva todos os numeros terminados em 7*/ { poss_primos[contador2]=contador; contador2=contador2+4; } contador2=7; for(contador=19; contador<1000;contador+=10)/*salva todos os numeros terminados em 9*/ { poss_primos[contador2]=contador; contador2=contador2+4; } for(contador=4;contador<200;contador++)/* atribui o valor 1 as posições ainda sem valor atribuido*/ nprimo[contador]=1;//até aqui está correto// for(i=4; i<400; i++)/*numeros primos ainda não definidos*/ { primo=1; for(contador=0; contador < i; contador++)/*testa se o numero é primo*/ { resto = poss_primos[i] % nprimo[contador];/*divide o possivel numero primo por todos os primos já encontrados*/ if (resto==0) primo=0;/*se pelo menos uma vez resto =0 o numero não é primo*/ } if (primo==1)/*se o numero primo*/ { cont_primo++;/*conta as posições do vetor nprimo, primeiramente cont_primo=7*/ nprimo[cont_primo]=poss_primos[i];/*passa o valor de poss_primos para o vetor nprimo (os numeros primos) */ } } for(contador=0; contador<200; contador++) { if(nprimo[contador]>1) printf("%d\n", nprimo[contador]);/*como não sabemos certo quantos numeros primos tem, se o valor não foi modificado não é mostrado*/ } }Editado por gabrielEMLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.