示例#1
0
        public cpolinom meth2_49(cpolinom n)
        {
            cpolinom u = Copy(this);
            cpolinom v = Copy(n);
            cpolinom g1 = new cpolinom("1", n.mod);
            cpolinom g2 = new cpolinom("0", n.mod);

            while (u.Count != 1 && v.Count != 1)
            {
                Fix(u);
                Fix(v);
                Fix(g1);
                Fix(g2);
                cpolinom z = new cpolinom("1 0", n.mod);

                while ((u % z).isZero() == true)
                {
                    u = u / z;
                    if (g1.isZero() == true)
                        g1 = (g1 + n) / z;
                    while ((g1 % z).isZero() == false)
                        g1 = g1 + n;
                    g1 = g1 / z;
                }

                while ((v % z).isZero() == true)
                {
                    v = v / z;
                    if (g2.isZero() == true)
                        g2 = (g2 + n) / z;
                    while ((g2 % z).isZero() == false)
                        g2 = g2 + n;
                    g2 = g2 / z;                    
                }
                
                if (u.Count > v.Count)
                {
                    u = u + Copy(v);
                    g1 = g1 + g2;
                }
                else
                {
                    v = v + Copy(u);
                    g2 = g2 + g1;
                }
            }
            Fix(g1);
            Fix(g2);
            cpolinom g;
            if (u.Count == 1)
                g = g1;
            else
                g = g2;
            cpolinom t = ((g * this) % n);
            while (t.isOne() == false)
            {
                g = g + g;
                t = ((g * this) % n);
            }
            return g;
        }
示例#2
0
        public cpolinom Inv3Polinom(cpolinom n)
        {
            cpolinom a = new cpolinom("1", n.mod);
            cpolinom b = Copy(this);
            cpolinom v = new cpolinom("0", n.mod);
            cpolinom p = Copy(n);
            int d = -1;

            p = new cpolinom("1 0 0 1 1", 2);
            a = new cpolinom("1 1 0 1", 2);
            b = new cpolinom("1 1 1", 2);

            StreamWriter sw = new StreamWriter("1234.txt");

            while (a.isZero() == false && p.isOne() == false)
            {
                sw.WriteLine(d + "|" + b.ToString() + "|" + p.ToString() + "|" + a.ToString() + "|" + v.ToString());
                if(b[b.Count - 1] == 1)
                {
                      if(d < 0)
                      {
                          b = b + p;
                          p = b - p;
                          a = a + v;
                          v = a - v;
                          d = -d;
                      }
                      else
                      {
                          b = b + p;
                          a = v + a;
                      }
                }
                b = b / (new cpolinom("1 0", n.mod));
                a = a / (new cpolinom("1 0", n.mod));
                d = d - 1;
            }
            sw.Close();
            return v;    

        }