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);
}