Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 11 Agosto 2015, 12:59 pm



Título: Numeros amigos y numeros perfectos programa en C
Publicado por: estudiante_1 en 11 Agosto 2015, 12:59 pm
Enunciado: Dos números amigos son dos números enteros positivos a y b tales que la suma de los divisores propios de uno es igual al otro número y viceversa, es decir σ(a)=b y σ(b)=a, donde σ(n) es igual a la suma de los divisores de n, sin incluir a n. (La unidad se considera divisor propio, pero no lo es el mismo número.)

Un ejemplo es el par de naturales (220, 284), ya que:

los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110, que suman 284;
los divisores propios de 284 son 1, 2, 4, 71 y 142, que suman 220.
Si un número es amigo de sí mismo (es igual a la suma de sus divisores propios), recibe entonces el nombre de número perfecto.
  Mi programa me va bien a la hora de decir si dos números son amigos, el problema lo tengo a la hora de decir si es perfecto. Ayúdenme.
Código:
#include<stdio.h>
#include<stdlib.h>


     int pedir_numero(char mensaje[]){
       int n;
       printf("%s\n",mensaje);
       scanf("%d",&n);
       while(n<0){
         printf("%s\n",mensaje);
         scanf("%d",&n);
       }
       return(n);
     }

     int suma_divisores(int n){
     int i,r,suma;
      suma=0;
      for(i=1;i<n;i++){
        r=n%i;
        if(r%i==0) suma=suma+i;
      }
      return(suma);
     }

    int sonamigos(int n1,int n2){
      int suma1,suma2;

      suma1 = suma_divisores(n1);
      suma2 = suma_divisores(n2);
      if ((suma1==n2)&& (suma2==n1)) return 1;
      else return 0;
    }


      int perfecto(int n3){
int suma3;
      (suma3==suma_divisores(n3));
      if(suma3==n3) return 1;
      else return 0;


      }


int main(void){
int n1,n2,n3;
int suma;

n1=pedir_numero("Dime el primer numero\n");
n2=pedir_numero("Dime el segundo numero\n");

if (sonamigos(n1,n2)) printf("\nSi son amigos\n");
else printf("\nNo son amigos\n");
n3=pedir_numero("Dime el tercer numero y veremos si es perfecto\n");
if(perfecto(n3)) printf("%d es perfecto\n",n3);
else printf("%d no es perfecto\n",n3);
system("Pause");
return(0);
}



















Gracias, de verdad.


Título: Re: Numeros amigos y numeros perfectos programa en C
Publicado por: ivancea96 en 11 Agosto 2015, 14:38 pm
Pusiste suma3==suma_divisores(n3). No es "==", es "=".

En cualquier caso, te es más rápido poner:
Código
  1. int perfecto(int n3){
  2.    if(suma_divisores(n3)==n3) return 1;
  3.    else return 0;
  4. }


Título: Re: Numeros amigos y numeros perfectos programa en C
Publicado por: estudiante_1 en 11 Agosto 2015, 23:51 pm
Gracias, vaya error que he tenido.