Teoría de números


Desarrollo de aplicación en C#

Los conceptos matemáticos en el siguiente enlace Teoría de Números


Aplicación en C#


using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

namespace Aplicaciones_Matemáticas
{
    public partial class Form1 : Form
    {
        int indica = 0;

        public Form1()
        {
            InitializeComponent();
        }

        void Form1Load(object sender, EventArgs e)
        {
            dataGridView1.AutoResizeColumns();
            dataGridView1.RowHeadersVisible = false;
        }
        private void númeroPerfectoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            indica = 1;
            limpiarControles(this);
            label1.Visible = true;
            label2.Visible = true;
            label1.Text = "Comprobar para un Número";
            label2.Text = "Número: ";
            textBox1.ForeColor = Color.Blue;
            textBox1.TextAlign = HorizontalAlignment.Center;
            textBox1.Font = new Font("Lucida Bright", 11);
            textBox1.Multiline = true;
            textBox1.AcceptsReturn = true;
            textBox1.AcceptsTab = true;
            textBox1.WordWrap = true;
            this.textBox1.Text = "Un número perfecto es aquel \r\n" +
            "cuyos divisores (excepto el mismo) \r\n" +
            "sumados dan como resultado \r\n" +
            "el número. Ejemplo: 6 = 3 + 2 + 1 \r\n" +
            "Comprueba a  la derecha 33550336";
            string[] currentColumn = new string[5];
            int j = 6;
            int cont = 0;
            while (cont < 4) {
                string cadena = numPerfect(j).Cad;
                int valor = numPerfect(j).Num;
                if (valor > 0) {
                    // Agregamos datos
                    currentColumn[cont] = valor.ToString();
                    cont = cont + 1;
                }
                j = j + 1;
            }
            cargarGrid(currentColumn);
        }


        private void númerosPrimosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            indica = 2;
            limpiarControles(this);
            label1.Visible = true;
            label2.Visible = true;
            label1.Text = "Comprobar para un Número";
            label2.Text = "Número: ";
            textBox1.ForeColor = Color.Blue;
            textBox1.TextAlign = HorizontalAlignment.Center;
            textBox1.Font = new Font("Lucida Bright", 11);
            textBox1.Multiline = true;
            textBox1.AcceptsReturn = true;
            textBox1.AcceptsTab = true;
            textBox1.WordWrap = true;
            this.textBox1.Text = "Un número primo es aquel \r\n" +
            "que tiene exactamente dos \r\n" +
            "divisores: el uno y el mismo \r\n" +
            "número. Ejemplo: 2, sus divisores son \r\n" +
            "1 y 2 solamente";
            string[] currentColumn = new string[100];
            int j = 3;
            int cont = 1;
            currentColumn[0] = "2";
            while (cont < 100) {
                long valor = numPrimo(j);
                if (valor > 0) {
                    // Agregamos datos
                    currentColumn[cont] = valor.ToString();
                    cont = cont + 1;
                }
                j = j + 1;
            }
            cargarGrid(currentColumn);
        }

        private void númerosAutomórficosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            indica = 3;
            limpiarControles(this);
            label1.Visible = true;
            label2.Visible = true;
            label1.Text = "Comprobar para un Número";
            label2.Text = "Número: ";
            textBox1.ForeColor = Color.Blue;
            textBox1.TextAlign = HorizontalAlignment.Center;
            textBox1.Font = new Font("Lucida Bright", 11);
            textBox1.Multiline = true;
            textBox1.AcceptsReturn = true;
            textBox1.AcceptsTab = true;
            textBox1.WordWrap = true;
            this.textBox1.Text = "Un número automórfico es aquel \r\n" +
            "cuya potencia al cuadrado \r\n" +
            "contiene el mismo número en\r\n" +
            "su  o sus últimas cifras. \r\n" +
            "Por ejemplo: 5, 6, 25, 76, 376, 625...\r\n" +
            "Comprueba 90625 y 109376";

            string[] currentColumn = new string[7];
            int j = 6;
            int cont = 1;
            currentColumn[0] = "5";
            while (cont < 7) {
                int valor = numAutomorf(j);
                if (valor > 0) {
                    // Agregamos datos
                    currentColumn[cont] = valor.ToString();
                    cont = cont + 1;
                }
                j = j + 1;
            }
            cargarGrid(currentColumn);
        }
        
        void MersenneToolStripMenuItemClick(object sender, EventArgs e)
        {
            indica = 4;
            limpiarControles(this);
            label1.Visible = true;
            label2.Visible = true;
            label1.Text = "Comprobar para un Número";
            label2.Text = "Número: ";
            textBox1.ForeColor = Color.Blue;
            textBox1.TextAlign = HorizontalAlignment.Center;
            textBox1.Font = new Font("Lucida Bright", 11);
            textBox1.Multiline = true;
            textBox1.AcceptsReturn = true;
            textBox1.AcceptsTab = true;
            textBox1.WordWrap = true;
            this.textBox1.Text = "Un número de Mersenne es aquel de la\r\n" +
            "forma 2^n-1. Si n es primo y el resultado\r\n" +
            "es número primo. Entonces es un número\r\n" +
            "primo de Mersenne. Por ejemplo: 3, 7, 31, 127,..." +
            "Comprueba para n=19 y n=31.";

            string[] currentColumn = new string[8];
            int j = 2;
            int cont = 1;
            currentColumn[0] = "3";
            while (cont < 8) {
                long valor = numMersenne(j);
                if (valor > 0) {
                    // Agregamos datos
                    currentColumn[cont] = valor.ToString();
                    cont = cont + 1;
                }
                j = j + 1;
            }
            cargarGrid(currentColumn);
        }

        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        /**********************************************/

        private void limpiarControles(Control parent)
        {
            foreach (Control c in parent.Controls) {
                if (c is TextBox) {
                    c.Text = "";
                }
                if (c is Label) {
                    c.Text = "";
                }

                if (c.Controls.Count > 0) {
                    limpiarControles(c);
                }
            }
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            dataGridView1.Refresh();
        }

        void cargarGrid(string[] curcol)
        {
            //Llenar grid           
            dataGridView1.Rows.Clear();
            dataGridView1.Refresh();
            DataGridViewCellStyle style =
                dataGridView1.ColumnHeadersDefaultCellStyle;
            style.BackColor = Color.Navy;
            style.ForeColor = Color.White;
            style.Font = new Font("Tahoma", 9);
            dataGridView1.DefaultCellStyle.Font = new Font("Tahoma", 8);
            dataGridView1.DefaultCellStyle.ForeColor = Color.Blue;
            dataGridView1.DefaultCellStyle.BackColor = Color.Beige;
            dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow;
            dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Black;
            dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            for (int i = 0; i < 10; i++) {
                string column = string.Format("C{0}", i + 1);
                dataGridView1.Columns.Add(column, column);
                dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dataGridView1.AutoSizeRowsMode =
                            DataGridViewAutoSizeRowsMode.AllCells;
                dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                dataGridView1.Columns[dataGridView1.Columns.Count - 1].AutoSizeMode =                                    DataGridViewAutoSizeColumnMode.Fill;
            if (indica == 1)
                dataGridView1.Rows.Add(curcol);
            if (indica == 2) {
                int i = 0;
                for (int j = 0; j < 10; j++) {
                    dataGridView1.Rows.Add();
                    for (int k = 0; k < 10; k++) {
                        dataGridView1.Rows[j].Cells[k].Value = curcol[i];
                        i = i + 1;
                    }
                }
            }
            if (indica == 3)
                dataGridView1.Rows.Add(curcol);     
            if (indica == 4)
                dataGridView1.Rows.Add(curcol);
            foreach (DataGridViewRow row in dataGridView1.Rows) {
                if (row.Index % 2 == 0) {
                    row.DefaultCellStyle.BackColor = Color.LightGray;
                } else
                    row.DefaultCellStyle.BackColor = Color.Ivory;
            }       
            dataGridView1.Refresh();
        }

        public NumPerfClass numPerfect(int num)
        {
            NumPerfClass datos = new NumPerfClass();
            int sumdiv = 1;
            string cadenasum = (this.textBox2.Text).Trim() + " = 1 + ";
            for (int i = 2; i <= num / 2; i++) {
                if (num % i == 0) {
                    sumdiv = sumdiv + i;
                    if (i < num / 2)
                        cadenasum = cadenasum + i.ToString() + " + ";
                    else
                        cadenasum = cadenasum + i.ToString();
                }
            }
            datos.Cad = cadenasum;
            if (sumdiv == num)
                datos.Num = num;
            else
                datos.Num = -1;
            return datos;
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {
            if (indica == 1) {
                int number = Int32.Parse(this.textBox2.Text);

                int valor = numPerfect(number).Num;
                string cadenasum = numPerfect(number).Cad;
                if (valor == number) {
                    this.label3.Text = "El número es Pefecto";
                    this.label4.Text = cadenasum;
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            switch (indica) {
                case 1:
                    int number = Int32.Parse(this.textBox2.Text);

                    int valor = numPerfect(number).Num;
                    string cadenasum = numPerfect(number).Cad;
                    if (valor == number) {
                        this.label3.Text = "El número es Perfecto";
                        this.label4.Text = cadenasum;
                    } else {
                        this.label3.Text = "El número NO es Perfecto";
                    }
                    break;
                case 2:
                    number = Int32.Parse(this.textBox2.Text);
                    long val = numPrimo(number);
                    if (val > 0)
                        this.label3.Text = "El número es Primo";
                    else
                        this.label3.Text = "El número no es Primo";
                    break;
                case 3:
                    number = Int32.Parse(this.textBox2.Text);
                    valor = numAutomorf(number);
                    if (valor > 0)
                        this.label3.Text = "El número es Automórfico";
                    else
                        this.label3.Text = "El número no es Automórfico";
                    break;
                case 4:
                    number = Int32.Parse(this.textBox2.Text);
                    long val1 = numMersenne(number);
                    if (val1 > 0)
                        this.label3.Text = "El número "+val1.ToString()+" es primo de Mersenne";
                    else
                        this.label3.Text = "El número "+number.ToString()+" no genera un primo de Mersenne";
                    break;
            }
        }

        public long numPrimo(long num)
        {
            if (num % 2 == 0)
                return -1;
            else {
                int i = 3;
                while (i <= System.Math.Sqrt(num)) {
                    if (num % i == 0) {
                        i = Convert.ToInt32(System.Math.Sqrt(num)) + 1;
                        return -1;
                    } else
                        i = i + 2;
                }
                return num;
            }
        }
        
        public long numMersenne(int num)
        {
            long valor = numPrimo(num);
            long pot = -1;
            if (valor > 0)
            {
                pot = Convert.ToInt64(Math.Pow(2, num)-1);
                valor = Convert.ToInt32(numPrimo(pot));
                if (valor > 0)
                    return pot;
                  else
                    return -1;}
              else
                return -1;
        }

        public int numAutomorf(int num)
        { 
            int numcif = 0;
            int cifin = 0;
            int num2 = num * num;
            int result = num2 / 10;
            double aux = 0;
            while (result > 0) {
                result = result / 10;
                numcif = numcif + 1;
            }     
            while (cifin != num && numcif > 0) {
                aux = Math.Truncate(num2 / (Math.Pow(10, numcif))) * Math.Pow(10, numcif);
                cifin = num2 - Convert.ToInt32(aux);
                numcif = numcif - 1;
            }
            if (cifin == num)
                return cifin;
            else
                return -1;
        }
    }
}

Aplicaciones Matemáticas, una aplicación desarrollada en C# para comprobar algunas propiedades numéricas.


Aplicación Android

Desarrollo en AppyBuilder, se presentan los módulos principales

Módulo para determinar si un número ingresado es primo. Haz click para ampliar
Módulo para determinar si un número ingresado es primo. Haz click para ampliar
Módulo para determinar si un número ingresado genera un número primo de Mersenne. Haz click para ampliar
Módulo para determinar si un número ingresado genera un número primo de Mersenne. Haz click para ampliar
Módulo para obtener los divisores y verificar la sumatoria. Haz click para ampliar.
Módulo para obtener los divisores y verificar la sumatoria. Haz click para ampliar.
Comprobar si un número dado es automórfico. Haz click para ampliar.
Comprobar si un número dado es automórfico. Haz click para ampliar.
Comprobar números amigos. Haz click para ampliar.
Comprobar números amigos. Haz click para ampliar.
Módulo principal Conjetura de Goldbach. Haz click para ampliar.
Módulo principal Conjetura de Goldbach. Haz click para ampliar.

Aplicación a descargar. La aplicación está desarrollada para visualizar en tabletas por lo que podría presentar problemas en teléfonos móviles. Ignorar si se presentara falso positivo de Amenaza, ya que la apk no ha sido firmada para subir al Play Store.