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
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");
}
}
}
Excelente aporte y super explicado
ResponderEliminarGracias!! me alegro de que os sea de utilidad
Eliminarmuy bueno hermano, gracias y bendiciones
ResponderEliminarGracias Henry
EliminarDisculpa con ese código me dio que 3 y 4 son Amigos, lo puedes corroborar porfa.
ResponderEliminarSi 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
EliminarHola , Enrique,
ResponderEliminarMuchas 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);
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:
Eliminarnum1 % i == 0
Saludos
import java.util.*; //Añade utilidades a nuestro código
Eliminarpublic class MyClass {
public static void main(String args[]) {
Scanner lector = new Scanner(System.in); //Utilidad de interacción
System.out.println("Ingresá un número:"); //Utilidad para escribir en pantalla
int n1 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine(); //lee el "enter" al ingresar un numero
int f = 0,d = 0; // operaciones logicas
int c = 0,c1 = 0; //contadores
do{
f = n1 - 1;
c = c + 1;
d = n1 % c;
if (d == 0){
c1 = c1 + c;
}
}while (c != f);
System.out.println("Ingresá otro número:"); //Utilidad para escribir en pantalla
int n2 = lector.nextInt(); //nextInt recupera un valor entero desde teclado
lector.nextLine(); //lee el "enter" al ingresar un numero
int f1 = 0,d1 = 0;// operaciones logicas
int c2 = 0,c3 = 0; //contadores
do{
f1 = n2 - 1;
c2 = c2 + 1;
d1 = n2 % c2;
if (d1 == 0){
c3 = c3 + c2;
}
}while (c2 != f1);
if (c1 == n2){
if (c3 == n1){
System.out.println("El numero: " + n1 + " y el numero: " + n2 + " son numeros amigos");
}else{
System.out.println("El numero: " + n1 + " y el numero: " + n2 + " no son numeros amigos");
}
}else{
System.out.println("El numero: " + n1 + " y el numero: " + n2 + " no son numeros amigos");
}
}
}
package comprobarcodigo;
ResponderEliminarimport 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");
}
}
}
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
ResponderEliminarpublic static void main (String[] args)throws IOException
ResponderEliminar{
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);
}
}
//para los que estan aprendiendo a programar en c# con ventanas ya la ise gracias estaba fallando en algunas cosas saluds
ResponderEliminarusing 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");
}
}
}
me sirvió mucho tu ejemplo
Eliminarmuchas gracias
Mas cortito y lo entiendo mejor =D gran blog me entusiasma hacer estos ejercicios
ResponderEliminarimport java.util.*;
public class Ejercicio8 {
public static void main(String[] args){
int n1,n2,d,suma1=0,suma2=0;
Scanner sc = new Scanner(System.in);
System.out.print("Introduce número 1: ");
n1=sc.nextInt();
System.out.print("Introduce número 2: ");
n2=sc.nextInt();
for(d=1;d<n1;d++){
if(n1%d==0){
suma1+=d;
}
}
for(d=1;d<n2;d++){
if(n2%d==0){
suma2+=d;
}
}
System.out.println(suma1==n2 && suma2==n1?"amigos":"no amigos");
sc.close();
}
}
Gracias por el comentario! me alegra de que te gusten los ejercicios. De la forma que propones también está bien resuelto, solo que se siempre calculas la suma de divisores de los dos números y luego compruebas si las sumas son iguales. La suma de divisores del segundo número no es necesario hacerla si suma1 != n2.
EliminarUn saludo y gracias por seguir el blog.
Hola buenos días acá hay una falla 11 y 6 son amigo
ResponderEliminarpero el programa no nuestra solo nuestra 220 y 284 y lo demás
yo programe de otra forma si me muestra que 6 y 11 son amigos de igual manera usando el
el bucle for
Como seria el mismo codigo para while
ResponderEliminarme ayudo mucho, gracias!!
ResponderEliminarYo lo hice de otra manera.
ResponderEliminarpublic class inicio {
public static void main(String[] args) {
int numeroA = 17296;
int numeroB = 18416;
int sumaDivisorA = 0, sumaDivisorB = 0;
for (int i = 1; i < numeroA; i++) {
if (numeroA % i == 0) {
sumaDivisorA += i;
}
}
if (!(sumaDivisorA == numeroB)) {
System.out.println("Son diferentes");
System.exit(0);
} else {
for (int j = 1; j < numeroB; j++) {
if (numeroB % j == 0) {
sumaDivisorB += j;
}
}
if (sumaDivisorB == numeroA) {
System.out.println("Son amigos");
}
}
System.out.println("sumaDivisorA = " + sumaDivisorA);
System.out.println("sumaDivisorB = " + sumaDivisorB);
}
}
Hola.He realizado este ejercicio y el anterior creando los siguientes métodos.
ResponderEliminarEn el main realizo la lectura de los datos.
public int SumaDivisores(int number){
//algoritmo que devuelve la suma de los divisores de un número
int sumDiv=0;
for(int div =1;div<number;div++){
if(number%div==0){
sumDiv = sumDiv+div;
}
}
return sumDiv;
}
public boolean IsPerfectNumber(int number){
//algoritmo para comprobar si un número es perfecto.
// Un número es perfecto si ES UN ENTERO POSITIVO Y es igual a la suma de todos sus divisores positivos sin incluir el propio número.
//Por ejemplo, el número 6 es perfecto.
//El 6 tiene como divisores: 1, 2, 3 y 6 pero el 6 no se cuenta como divisor para comprobar si es perfecto.
//Si sumamos 1 + 2 + 3 = 6
int sumDiv =0;
if (number <=0) return false;//PERFECTO DEBE SER ENTERO POSITIVO
sumDiv=SumaDivisores(number);
return (sumDiv==number);
}
public boolean IsFriendlyNumbers(int number1, int number2){
//Algoritmo que comprueba si dos números son amigos.
//Los números amigos son dos números enteros positivos «a» y «b» tales que
//la suma de los divisores (aquellos valores que dividen el número en partes exactas)
//propios de uno es igual al otro número y viceversa. El ejemplo más conocido es el de 220 y 284.
if(number1<=0 && number2<=0) return false;//Amigos deben ser ENTEROS POSITIVOS.
if (SumaDivisores(number1)==number2 && SumaDivisores(number2)==number1){
return true;
}else{
return false;
}
}