예제 #1
0
        private void MuestraDeOperacionesConFactoresPrimos()
        {
            uint           n = 50, r = 7;
            FactoresPrimos fp1 = new FactoresPrimos(ofp.FactorialEnPrimos(n - 1));

            fp1 = fp1 * n; // n!
            fp1 = (fp1 * (n + 10)) / (n + 10);
            FactoresPrimos fp2    = new FactoresPrimos(ofp.FactorialEnPrimos(n - r));
            FactoresPrimos fp3    = new FactoresPrimos(ofp.FactorialEnPrimos(r));
            FactoresPrimos fp4    = fp2 * ofp.FactorialEnPrimos(r);
            FactoresPrimos fpres1 = fp1 / (fp2 * fp3);
            FactoresPrimos fpres2 = fp1 / fp4;
            FactoresPrimos fpres3 = fp1 / fp2;

            fpres3 = fpres3 / fp3.Factores;

            MessageBox.Show("Muestra de operaciones con objetos FactoresPrimos\n\n\n" +
                            "fp1: ((49! * 50) * 60)/60 = " + n + "! = " + fp1.FactoresConPotenciasParaOperarEnTexto(fp1) + "\n\n" +
                            "fp2: " + (n - r) + "! = " + fp2.FactoresConPotenciasParaOperarEnTexto(fp2) + "\n\n" +
                            "fp3: " + r + "! = " + fp3.FactoresConPotenciasParaOperarEnTexto(fp3) + "\n\n" +
                            "fp1 / (fp2 * fp3) = " + fpres1.FactoresConPotenciasParaOperarEnTexto(fpres1) + "\n\n" +
                            "fp1 / (fp2 * fp3.factores) = " + fpres2.FactoresConPotenciasParaOperarEnTexto(fpres2) + "\n\n" +
                            "(fp1 / fp2) / fp3.factores = " + fpres3.FactoresConPotenciasParaOperarEnTexto(fpres3) + "\n\n" +
                            "Debe ser " + n + " C " + r + " = " + ofp.FactoresEnTexto(ofp.CombinacionesSinRepEnPrimos(n, r)) +
                            "\n\n  fp3 ^ 9 = " + fp3.FactoresConPotenciasParaOperarEnTexto(fp3 ^ 9));
        }
        public static FactoresPrimos operator /(FactoresPrimos fp1, uint[][] fp2)
        {
            FactoresPrimos fpRes = new FactoresPrimos();
            int            min   = fp1.PotenciasParaOperar.Count();
            int            max   = fp2.Count();

            if (max < min)
            {
                min   = max;
                fpRes = new FactoresPrimos(fp1);
            }
            else
            {
                fpRes = new FactoresPrimos(fp2);
                for (int i = 0; i < max; i++)
                {
                    fpRes.PotenciasParaOperar[i] *= -1;
                }
            }

            for (int i = 0; i < min; i++)
            {
                fpRes.PotenciasParaOperar[i] = fp1.PotenciasParaOperar[i] - fp2[i][1];
            }

            return(fpRes);
        }
        public static FactoresPrimos operator *(FactoresPrimos fp1, FactoresPrimos fp2)
        {
            FactoresPrimos fpRes;
            int            min = fp1.PotenciasParaOperar.Count();
            int            max = fp2.PotenciasParaOperar.Count();

            if (max < min)
            {
                min   = max;
                fpRes = new FactoresPrimos(fp1);

                for (int i = 0; i < min; i++)
                {
                    fpRes.PotenciasParaOperar[i] += fp2.PotenciasParaOperar[i];
                }
            }
            else
            {
                fpRes = new FactoresPrimos(fp2);

                for (int i = 0; i < min; i++)
                {
                    fpRes.PotenciasParaOperar[i] += fp1.PotenciasParaOperar[i];
                }
            }

            return(fpRes);
        }
        public static FactoresPrimos operator ^(FactoresPrimos fp1, uint k)
        {
            FactoresPrimos fpRes = new FactoresPrimos(fp1);

            for (int i = 0; i < fp1.Factores.Count(); i++)
            {
                fpRes.PotenciasParaOperar[i] *= k;
            }

            return(fpRes);
        }
        public FactoresPrimos(FactoresPrimos fp)
        {
            int c = fp.Factores.Count();

            PotenciasParaOperar = new long[c];
            Factores            = new uint[c][];

            for (int i = 0; i < c; i++)
            {
                Factores[i] = new uint[2];
            }

            for (int i = 0; i < c; i++)
            {
                Factores[i][0]         = fp.Factores[i][0];
                Factores[i][1]         = fp.Factores[i][1];
                PotenciasParaOperar[i] = fp.PotenciasParaOperar[i];
            }
        }
        public string FactoresConPotenciasParaOperarEnTexto(FactoresPrimos fp)
        {
            string texto = "";
            int    c     = fp.Factores.Count();

            for (int i = 0; i < c; i++)
            {
                if (fp.PotenciasParaOperar[i] == 0)
                {
                    continue;
                }

                if (fp.PotenciasParaOperar[i] == 1)
                {
                    texto += "(" + fp.Factores[i][0] + ") ";
                }
                else
                {
                    texto += "(" + fp.Factores[i][0] + "^" + fp.PotenciasParaOperar[i] + ") ";
                }
            }

            return(texto);
        }
예제 #7
0
 public frmPrincipal()
 {
     InitializeComponent();
     ofp = new FactoresPrimos();
 }