Ir para conteúdo

POWERED BY:

Arquivado

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

Sopiseiro

Como faco um algoritmo para gerar os 5 numeros perfeitos

Recommended Posts

Definição de número perfeito: Número perfeito é todo aquele que a soma de seus divisores inteiros, exceto ele proprio, que resultam em um número inteiro que é ele proprio.

Bem, para começar faça um loop para achar todos os divisores, e cada vez que você achar um divisor já some-o com o anterior encontrado.Assim você terá a soma de todos os divisores. Depois simplesmente use uma condicional para dizer se a soma dos divisores é igual ou diferente do número, afirmando se é perfeito ou imperfeito.Este é o procedimento para verificar se um número é perfeito.Então para achar os 5 primeiros simplesmente faça um loop, começando do 2, incrementando cada vez que encontrar ou não um número perfeito, e armazene a quantidade de vezes que encontrou em um contador. Quando este contador atingir 5 acabou :)Não é tão complicado quanto parece :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Definição de número perfeito: Número perfeito é todo aquele que a soma de seus divisores inteiros, exceto ele proprio, que resultam em um número inteiro que é ele proprio.

Bem, para começar faça um loop para achar todos os divisores, e cada vez que você achar um divisor já some-o com o anterior encontrado.Assim você terá a soma de todos os divisores. Depois simplesmente use uma condicional para dizer se a soma dos divisores é igual ou diferente do número, afirmando se é perfeito ou imperfeito.Este é o procedimento para verificar se um número é perfeito.Então para achar os 5 primeiros simplesmente faça um loop, começando do 2, incrementando cada vez que encontrar ou não um número perfeito, e armazene a quantidade de vezes que encontrou em um contador. Quando este contador atingir 5 acabou :)Não é tão complicado quanto parece :P
Kra eu entendi o seu pensamento assim mas não faz me de uma luz pra resolver esse problema
# include <stdio.h>main (){	int numero,divisor,cont=0,soma=0,perfeito;	 while (cont<=5)	 {		   for (numero=1;numero<=1000;numero++)		   {			   for (divisor=1;divisor<=(numero/2);divisor++)			   {						perfeito =  numero%divisor;						if (perfeito==0)						soma = soma + divisor;						}						if (soma==numero)						printf ("Numero %d e perfeito.",numero);						cont++;		   }							 } 	 getchar ();	 getchar ();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>// Retorna 1 se for perfeito ou 0 se não forint checaperfeito(int num) {	 int divisores=0,i;	 for (i=1; i<num; i++) {		 if ((num%i) == 0) {					 divisores += i;		 }		 }	 	 if(divisores) {				   if(divisores==num) return 1;				   }	 return 0;}// Função principalvoid main() {	   int i,j;	   while(j!=5) { // enquanto não achar os 5 primeiros não para de tentar				   if(checaperfeito(i)) {										printf("%d\n",i);										j++;										}				   i++;				   }	   			  }

Vê se entende o meu

Compartilhar este post


Link para o post
Compartilhar em outros sites

caraca... isso é em C ??showde bola os codigos....ainda caio nessa rede!!abrasssss

Kra o negocio é o seguinte o algoritmo eu ja fiz so que preciso saber uma coisa, em linguagem "C" gera os cinco numeros ou não? Por que o algoritmo que eu fiz gera apenas quatro e não sai disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi

 

Eu estava procurando o mesmo número/algorítimo e acabei achando vcs.

E tb achei isso na wikipedia Número perfeito.

 

Fiz o código abaixo usando C. Mas tive um problema. Pela definição da fómula que está no link acima o multiplicador 2 elevado a n menos 1 que seria em C (pow(2,n)-1) TEM QUE SER um número primo... tudo bem podem me chamar de noob mas não consegui fazer uma função e verifica-se se o número é primo e retorna-se o valor dele pra parte indicada no código.

 

Tentei fazer a função...

 

quem puder desde já agradeço..

 

ah só pra constar minha prof pirou quando pediu isso... os 10 primeiros nº perfeitos

 

 

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>

[b]/*
int divisor(int)
{
	int aux, primo[3], n=2;

for(aux=0;aux<=3;aux++)
	{
		if((pow(2,n)-1)%2!=0 || (pow(2,n)-1)%3!=0) 
		primo[aux];
		n++;
	}

return primo[aux];
}
*/[/b]

void main(void)
{
	int n=2, perfeito[10], cont;

	for(cont=0;cont<=10;cont++)
		{
		perfeito[cont]=pow(2,n-1)*(pow(2,n)-1 [b] <<<quero colocar aqui a no lugar deste pow a função divisor acima[/b]); 
		n++;
		}

	printf("Os n\xA3meros perfeitos são:\n");

	for(cont=0;cont<=10;cont++)
		printf("%d\n", perfeito[cont]);

system ("pause");
//getch();
return 0;
}

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.