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; }
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; }