Números amigos en C

publicado por: Anonymous

Tengo este programa que no tira error pero simper da que no son números amigos aunque los números ingresados SI sean amigos.

#include <stdio.h>

int numeros_amigos(int x, int y){
    int suma_x=0;
    int suma_y=0;
    int i, k;
    for (i = 1; i <= x; i++){
        if (x%i==0)
            suma_x+=i;
    }
    for (k = 1; k <= y; k++){
        if (y%k==0)
            suma_y+=k;
    }
    return ((suma_x==y) && (suma_y==x));
}   

int main(){
    int n_1, n_2;
    printf("Introduzca el nº 1: ");
    scanf("%d",&n_1);
    printf("Introduzca el nº 2: ");
    scanf("%d",&n_2);

    if (numeros_amigos(n_1,n_2))
        printf ("¡Son amigos! :)");
    else
        printf ("No son amigos :(");
    return 0;
}

solución

El problema es que un número amigo no debe considerar al mismo número como divisor, entonces cambia tus for para que no incluyan al propio número.

#include <stdio.h>

int numeros_amigos(int x, int y){
int suma_x=0;
int suma_y=0;
int i, k;
for (i = 1; i < x; i++){
    if (x%i==0)
        suma_x+=i;
}
for (k = 1; k < y; k++){
    if (y%k==0)
        suma_y+=k;
}
return ((suma_x==y) && (suma_y==x));
}   

int main(){
 int n_1, n_2;
 printf("Introduzca el nº 1: ");
 scanf("%d",&n_1);
 printf("Introduzca el nº 2: ");
 scanf("%d",&n_2);

 if (numeros_amigos(n_1,n_2))
    printf ("¡Son amigos! :)");
 else
    printf ("No son amigos :(");
 return 0;
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *