Tomemos por ejemplo el número el número 284, que se puede escribir como la multiplicación de los números primos 71 y 2 de la siguiente forma… 284 = 71 x 2 x 2 = 71 x 2 al cuadrado. Así, es fácil de calcular que los divisores del número 284 (sin contar el propio número), son {1, 2, 4, 71, 142}, cuya suma es
1 + 2 + 4 + 71 + 142 = 220.
Si ahora cogemos el número que nos ha salido, 220, y buscamos sus divisores, como 220 = 11 x 5 x 2 x 2, entonces estos son {1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110}, y la suma de estos es
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284,
precisamente el primer número. Por este motivo, se dice que los números 220 y 284 son números amigos. Es decir, dos números son amigos si la suma de los divisores del primero (sin contar al número) es igual al segundo, y viceversa.
Este par de números amigos (220, 284) ya era conocido por los pitagóricos, quienes les atribuían propiedades místicas. En general, en la antigüedad se pensaba que estos números tenían poderes místicos, y eran utilizados en textos religiosos y de magia, en particular, en relación al amor y la amistad. Los astrónomos griegos los incorporaron en sus horóscopos, talismanes y amuletos.
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 NumerosAmigos_Forms_I
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int numeromaximo;
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
int[] sumas = new int[numeromaximo];
for (int i = 1; i < sumas.Length; i++)
sumas[i] = SumaMultiplos(i);
for (int j = 1; j < sumas.Length; j++)
{
int v1 = sumas[j];
if (v1 > 1 & v1 < sumas.Length)
{
int v2 = sumas[v1];
if (v2 == j && v1 > v2)
listBox1.Items.Add(v2.ToString() + " <--> " + v1.ToString());
}
}
}
private Int32 SumaMultiplos(int Numero)
{
Int32 suma = 1;
int mitad = Numero / 2 + 1;
for (int i = 2; i < mitad; i++)
{
int r = 0;
int c = Math.DivRem(Numero, i, out r);
if (r == 0)
suma += c;
}
return suma;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
numeromaximo = int.Parse(textBox1.Text);
}
}
}
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.