Ir ao conteúdo

Ling C: Imprimir NUMEROS PRIMOS


L.Tomaz

Posts recomendados

Postado

Caros Amigos (as)

Preciso de uma ajuda...

Preciso criar um programa que Imprima na Tela os Numeros Primos de 0 a 1000 em 10 Colunas.

Ex:

2 3 5 7 11 13 17 19 23 29

31.......................................

73.......................................

..............................997.

Alguem consegue me auxiliar com o código em C ??

Muito Obrigada!! :)

Postado

Já sabe como achar os primos?

Vai testando de um por um, dividindo por todos os anteriores.

Por exemplo, pra saber se 'n' é primo, o resto da divisão por 2, 3, ... até n-1 tem que ser diferente de 0.

Se forem, é primo. (na verdade dá pra otimizar, testando até n/2, e de 2 em 2, já que pares não são primos, além do 2).

Usa uma variável pra contar quantos primos tem, e a cada 10 você dá uma quebra de linha.

Postado

Oi madame;

Procure por "crivo de Eratóstenes" para ter uma ideia, e se desejar aprofundar, o texto "Fórmulas para Números Primos" do Eric Campos Bastos Guedes.

abraços.

Postado
Já sabe como achar os primos?

Vai testando de um por um, dividindo por todos os anteriores.

Por exemplo, pra saber se 'n' é primo, o resto da divisão por 2, 3, ... até n-1 tem que ser diferente de 0.

Se forem, é primo. (na verdade dá pra otimizar, testando até n/2, e de 2 em 2, já que pares não são primos, além do 2).

Usa uma variável pra contar quantos primos tem, e a cada 10 você dá uma quebra de linha.

Tenho o código abaixo, no entanto os numeros entram em uma única coluna. Consegue me auxiliar o que devo modificar para conseguir quebrar a linha depois de 10 colunas?


#include<stdio.h>

int main()
{
int i=2;
int b=2;
int c=0;
char q;
while(1)
{
while(b<i)
{
if(i % b == 0)
{
c=1;
break;
}
b=b+1;
}

b=2;

if(c==0)
{
printf("%d", i);
q=getchar();
if(q=='q')
return 0;
}

c=0;

i++;
}
}

Obrigada !!!

Postado

Olá L. Tomaz

o getchar() quebrava a linha. Substitui-o por um getch () e fiz mais alguns ajustes, dê uma olhada no código e veja se ficou como gostaria

#include<stdio.h>

int main()
{
int i=2;
int b=2;
int c=0;
int cont=0;

char q;
while(1)
{
while(b<i)
{
if(i % b == 0)
{
c=1;
break;
}
b=b+1;
}

b=2;

if(c==0)
{
if (cont%10 == 0)
printf ("\n");
printf("%3d ", i);
cont++;
q=getch();
if(q=='q')
return 0;
}

c=0;

i++;
}
}

Postado

Substitui-o por um getch () e fiz mais alguns ajustes, dê uma olhada no código e veja se ficou como gostaria

Caro Felipeek.. era Realmente isso, grata pela ajuda!

]No entanto preciso limitar minha matriz à 1000. Que na verdade o ultimo numero primo seria 997... Sabe como posso fazer isso?

E eu consigo automatizar, para que nao haja a necessidade de dar Enter para que o proximo numero primo seja imprimido? Digo, ao rodar o exe, consigo que toda a matriz já entre na tela de uma unica vez?

Obrigada ! :)

Postado
Caro Felipeek.. era Realmente isso, grata pela ajuda!

]No entanto preciso limitar minha matriz à 1000. Que na verdade o ultimo numero primo seria 997... Sabe como posso fazer isso?

E eu consigo automatizar, para que nao haja a necessidade de dar Enter para que o proximo numero primo seja imprimido? Digo, ao rodar o exe, consigo que toda a matriz já entre na tela de uma unica vez?

Obrigada ! :)

claro, é bem simples na verdade... apenas retire o getch() e dê um limite ao while(); desta maneira:

#include<stdio.h>

int main()
{
int i=2;
int b=2;
int c=0;
int cont=0;
char q;

while(i<1000)
{
while(b<i)
{
if(i % b == 0)
{
c=1;
break;
}
b=b+1;
}

b=2;

if(c==0)
{
if (cont%10 == 0)
printf ("\n");
printf("%3d ", i);
cont++;
}

c=0;

i++;
}
}

Perceba que ali no while(i<1000) você pode definir até que número você quer que a matriz vá.

Aproveitando essa historia de numeros primos.. há um tempo eu tinha feito um código que mostrava os primos também. Arrumei pra ficar com 10 colunas igual ao seu. Se preferir aqui está o código:

#include <stdio.h>
#define NMIN 2
#define NMAX 1000

int verifica_primo (int num)
{
int i, id = 1;

for (i=num-1; i>=2; i--)
{
if (!(num%i))
id = 0;
}

return id;
}

int main ()
{
int i, cont = 1;

for (i=NMIN; i<NMAX; i++)
{
if (verifica_primo(i))
{
printf ("%4d ", i);
if (cont%10 == 0)
printf ("\n");
cont++;
}
}
}

É um código mais limpo, e note que no topo do programa você pode definir o número mínimo e o número máximo que você pretende verificar se é primo (só mantenha o número minimo maior do que 2 pra nao dar problema, quando fiz o codigo não tava muito preocupado com a consistencia do mesmo hehe).

abraço!

Postado

segue o codigo, sem quebra de linha:

#include <stdio.h>

const int N = 1000;

int main()
{
long i, a[N];
for (i = 2; i < N; i++) a[i] = 1;

for (i = 2; i < N; i++)
if (a[i])
for (int j = i; (j * i) < N; j++)
a[i * j] = 0;

for (i = 2; i < N; i++)
if (a[i])
printf("%8d", i);

getchar();
return 0;
}

e com quebra de linha

#include <stdio.h>

const int N = 1000;

int main()
{
long i, a[N];
for (i = 2; i < N; i++) a[i] = 1;

for (i = 2; i < N; i++)
if (a[i])
for (int j = i; (j * i) < N; j++)
a[i * j] = 0;

int j = 0;
for (i = 2; i < N; i++)
if (a[i])
{
printf("%4d", i);
if (++j == 10)
{
printf("\n");
j = 0;
}
}

getchar();
return 0;
}

Postado

Caros Amigos,

Muito Obrigada a todos pela Grande Força...

@Felipeek: Agora com esses ultimos ajustes o programa ficou exatamente como necessito. Grata!

Att,

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!