Números amigos en Java

Comprobar si dos números son amigos

Dos números enteros positivos A y B son números amigos si la suma de los divisores propios de A es igual a B y la suma de los divisores propios de B es igual a A.

Los divisores propios de un número incluyen la unidad pero no el propio número.

Un ejemplo de números amigos son los números 220 y 284.
Los divisores propios de 220 son 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110.
La suma de los divisores propios de 220 da como resultado 284
Los divisores propios de 284 son 1, 2, 4, 71 y 142.
La suma de los divisores propios de 284 da como resultado 220.
Por lo tanto 220 y 284 son amigos.

Otras parejas de números amigos son:

 1184,   1210
 2620,   2924
 5020,   5564
 6232,   6368
10744, 10856
12285, 14595
17296, 18416

Vamos a escribir el programa que calcula si dos números son amigos:

import java.util.*;
/**
 * Programa Java que determina si dos números son amigos.
 * Dos números son amigos si la suma de los divisores propios del primero
 * es igual al segundo y viceversa.
 */
public class NumerosAmigos {
    public static void main(String[] args) {
        int i,suma=0, n1, n2;
        Scanner sc = new Scanner(System.in);
        System.out.print("Introduce primer número: ");
        n1 = sc.nextInt();
        System.out.print("Introduce segundo número: ");
        n2 = sc.nextInt();
        for(i=1;i<n1;i++){  // for para sumar todos los divisores propios de n1
             if(n1%i==0){
                suma=suma+i;
             }
        }
        // si la suma de los divisores de n1 es igual a n2
        if(suma==n2){
           suma=0;
           for(i=1;i<n2;i++){  // sumo los divisores propios de n2
                if(n2%i==0){
                   suma=suma+i;
               }
           }
        // si la suma de los divisores de n2 es igual a n1
           if(suma==n1){
              System.out.println("Son Amigos");
           }else{
                   System.out.println("No son amigos");
           }
        }        
        else{
               System.out.println("No son amigos");
        }
    }
}



12 comentarios:

  1. Excelente aporte y super explicado

    ResponderEliminar
    Respuestas
    1. Gracias!! me alegro de que os sea de utilidad

      Eliminar
  2. muy bueno hermano, gracias y bendiciones

    ResponderEliminar
  3. Disculpa con ese código me dio que 3 y 4 son Amigos, lo puedes corroborar porfa.

    ResponderEliminar
    Respuestas
    1. Si introduces 3 y 4 el programa te dice que no son amigos. Revisa el código que estás usando por si has cambiado alguna llave de lugar

      Eliminar
  4. Hola , Enrique,
    Muchas gracias por este ejercicio, me sirvio de mucho!
    Pero aprovecho para ver si te puedo hacer una consulta. Resulta que yo soy novato en programacion java, bueno... al principio yo estaba intentando hacer este ejercicio con un do \while, es muy poco lo que llevo, pero al momento queria probar si mi acumulador de divisores esta bien formulado me di cuenta que me esta dando un numero totalmente diferente, no se porque, no se si estoy utilizando bien el do/ while o si es mas una cosa del if, aqui te dejo un ejemplo, si tiene tiempo para que lo revise y me pueda dar un idea o direccion de como solucionar el algoritmo utilizando el do / while en lugar del for. no estoy menospreciando tu trabajo , de lo contrario estoy muy agradecido de haber encontrado algo asi. de seguro me sirve como idea para lo que me falta por desarrollar pero al momento no me esta funcionado los acumuladores de divisores
    |
    |
    v

    public static void main(String[] args) {


    Scanner teclado = new Scanner(System.in);
    int num1 = 0;
    int num2 = 0;
    int i = 0;
    int TotalSumaDivisores = 0 ;
    System.out.println("digite un numero");
    num1 = teclado.nextInt();


    do {
    i++;
    if( num1 % i==0){

    TotalSumaDivisores = TotalSumaDivisores + i ;

    }




    }while (i<num1);

    System.out.println(""+ TotalSumaDivisores);

    ResponderEliminar
    Respuestas
    1. Hola, lo que está pasando es que estás dividiendo también por el propio número y lo estás sumando al acumulador de divisores. Debes comprobar que i < num1 para poder realizar la operación:
      num1 % i == 0
      Saludos

      Eliminar
  5. package comprobarcodigo;
    import java.util.Scanner;
    public class Comprobarcodigo {
    public static void main(String[] args) {

    int n1,n2,sumaN1=0,sumaN2=0;
    int div;
    Scanner entrada = new Scanner(System.in);

    System.out.printf("%s\n","Bienvenido, ingresa dos numeros para saber si son amigos");
    System.out.printf(" %s\n%s\n%s\n","Dos números enteros positivos A y B son números amigos si"," la suma de los divisores propios de A es igual a B"," y la suma de los divisores propios de B es igual a A.");
    System.out.printf("\t%s\n","Por ejemplo 220 y 284 son amigos");
    n1 = entrada.nextInt();
    n2 = entrada.nextInt();

    for(div=1;div<n1;div++){
    if(n1 % div ==0){
    sumaN1 = sumaN1+div;
    }
    }
    for(div=1;div<n1;div++){
    if(n2 % div ==0){
    sumaN2 = sumaN2+div;
    }
    }
    if(sumaN1==n2 && sumaN2==n1){
    System.out.println("Son numeros amigos");
    }
    else{
    System.out.println("no son numeros amigos");
    }
    }
    }

    ResponderEliminar
  6. Si quisiera implementar un metodo para cada numero como lo podria hacer me puedes ayudar con una guia de eso soy nuevo en la materia. Saludos

    ResponderEliminar
  7. public static void main (String[] args)throws IOException
    {
    BufferedReader tecla=new BufferedReader(new InputStreamReader(System.in));
    int N, I=0;
    System.out.println(" INVERTIR CIFRA");
    System.out.println(" -------- -----");
    System.out.print(" NUMERO : ");
    N = Integer.parseInt(tecla.readLine());
    while (N > 0)
    {
    I = I * 10 + N % 10;
    N = N / 10;
    }
    System.out.println(" INVERTIDO : " + I);
    }
    }

    ResponderEliminar
  8. //para los que estan aprendiendo a programar en c# con ventanas ya la ise gracias estaba fallando en algunas cosas saluds
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WindowsFormsApplication7
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    int a, b, suma = 0;
    a = int.Parse(textBox1.Text);
    b = int.Parse(textBox2.Text);
    for (int i = 1; i < a; i++)
    {
    if (a % i == 0)
    suma = suma + i;
    }
    if (suma == b) {

    suma = 0;


    for (int i = 1; i < b; i++)
    {
    if (b % i == 0)
    suma = suma + i;

    }
    }

    if (suma == a)
    listBox1.Items.Add("los numeros " + a + " y " + b + "si son amigos");
    else
    listBox1.Items.Add("los numeros "+ a +" y "+ b +"no son amigos");


    }
    }
    }

    ResponderEliminar