Ir para conteúdo

POWERED BY:

Arquivado

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

lucas rocha

[Resolvido] Números Perfeitos

Recommended Posts

Boa Tarde!

Tenho um enunciado que estou com um problemão...

 

Escreva um programa em C que apresente os cinco (5) primeiros números perfeitos...

 

Porem preciso que seja usada somente a biblioteca <stdio.h e a de string> se necessário... esse programa vale minha nota do semestre porem ta difícil mesmo....

 

Se alguem souber me ajudar..

Desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Números Perfeitos: Em Matemática, um número perfeito é um número inteiro para o qual a soma de todos os seus divisores positivos próprios (excluindo ele mesmo) é igual ao próprio número.

 

Por exemplo, o número 6 é um número perfeito, pois:

 

6=1+2+3

 

fonte: wikipedia

 

 

Para calcular isso, poderá dar um trabalhinho

 

dicas:

- teste os números pares.

- comece pelo divisor n/2

 

Isso resultará num processamento mais enxuto.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu entendi, talvez o maior desafio seja não poder usar a função pow, uma vez que a fórmula indicada é: 2n-1(2n-1).

 

Segundo a fonte apontada por Kandrade (wikipedia), para gerar os 5 primeiros números perfeitos é preciso: n= 2, 3, 5, 7 e 13.

Você poderá usar uma lógica engessada, deixando esses números fixos em um vetor (que será percorrido) ou, com a ajuda da biblioteca string.h, calcular os 5 primeiros números primos que não tenham as casas das dezenas e unidades iguais. Como por exemplo: 11 (que é primo, mas não gera um número perfeito). A primeira opção é mais simples.

 

Para o main sugiro um código próximo a isso:

 

double resp[5], flag1[5], flag2[5];

int i, n[]={2, 3, 5, 7, 13};

 

for(i=0;i<5;i++){

flag1 = expoente(2, (n-1)); //Calcula 2n-1

flag2 = expoente(2, (n)); //Calcula 2n

}

 

for(i=0;i<5;i++)

resp=flag1[1]*(flag2-1);

Deixarei você criar a função expoente.

Uma dica: use recursividade e consulte apostilas/livros como: Apostila UFRGS http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

# include <stdio.h>

main ()

{

int i, j, a=0;

for (j=10000; j>=1; j--)//j=10000 aki você pode altera ate qt você quer ver os numeros perfeito

{

for (i=1; i<=10000; i++)//só ñ esquece de alterar aki tb

if (((j%i)==0) && (i!=j))

a=a+i;

if (a==j) printf ("\nNumero perfeito: %d\n", a);

a=0;

}

fflush (stdin);

getchar ();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
CODE

# include <stdio.h>
main ()
{
int i, j, a=0;
for (j=10000; j>=1; j--)//j=10000 aki você pode altera ate qt você quer ver os numeros perfeito
{
for (i=1; i<=10000; i++)//só ñ esquece de alterar aki tb
if (((j%i)==0) && (i!=j))
a=a+i;
if (a==j) printf ("\nNumero perfeito: %d\n", a);
a=0;
}
fflush (stdin);
getchar ();
}


Roberto leia bem a definição de um numero perfeito!!!...O teu algoritmo vai somar 1 sempre que for divisivel, imagine que o numero colocado seja 6...ele vai de 1 até 1000 ("que ja nao podia, so tem que sair de 1 até 6") e sempre que for divisivel ele vai adicionar 1 a varivel a...o resultado final de a será 3 e 3 é diferente de 6....
E depois ele so pediu pra ir buscar os cinco primeiros numeros perfeitos, logo o ciclo ideal deixa de ser o for mas sim o while ou do..while.

Entao o algoritmo deve ser mais ou menos assim....

CODE

#include<stdio.h>
#include<conio.h>
main()
{
int n=0,soma=0,i=1;
while(n<=5)
{ for(j=1;j<i;j++)
if(i%j==0)
soma=soma+j; //Soma os divisores
if(soma==i)//se a soma for igual ao numero (i)
{
printf("%d ",i);//imprime o numero
n++;
}
i++;
}
getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://primes.utm.edu/glossary/page.php?sort=perfectnumber

 

De Euler: todos os números perfeitos pares são da forma 2n-1(2n-1).

 

Theorem:

If 2k-1 is prime, then 2k-1 (2k-1) is perfect and every even perfect number has this form.

 

It turns out that for 2k-1 to be prime, k must also be prime

 

 

http://dimacs.rutgers.edu/Workshops/Securi...ater/node3.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara

valeuzão mesmo

 

 

consegui aki

 

vou postar como ficou

 

#include <stdio.h>
int main (void) {

  int i;
  int j;
  int perfeito;
  int x;

  system ("clear");
  printf ("Ângelo Schmitz Pedron\n\n");
  printf ("Exercicío 2\n");
  

  for (i = 1; x<5; i++ ) {
	for (j = 1; j< i; j++) {
	  if ((i % j) == 0) {
		perfeito = perfeito + j;
	  }
	}
	if (i == perfeito) {
	  printf("O numero %d é perfeito\n",i);
	  x++;
	}
	perfeito=0;
  }
}

valeuzão ai galera agora to com otra bronca

hiuAHi

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.