private void Form1_Load(object sender, EventArgs e) { GF5 = new FiniteField(5); GF56Primitive = new Polynomial(GF5, 2, 0, 1, 4, 1, 0, 1); ExtF = new ExtensionField(GF56Primitive); lblInfo.Text = "Current Field Info: " + ExtF.ToString(); }
private void btnFixField_Click(object sender, EventArgs e) { int t = 0; bool dene = int.TryParse(txtSize.Text.Trim(), out t); if (dene) { if (MathTools.IsPrime(t)) { p = t; F = new FiniteField(p); lblInfo.Text = "Current Field: " + F.ToString(); } else { MessageBox.Show("Please enter a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtSize.Focus(); } } else { MessageBox.Show("Please check the value you have written!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtSize.Focus(); } btnFixField.Enabled = false; btnFixValues.Enabled = true; //lblInfo.Text = "Please enter the parameters"; }
public static void Main() { int H, W, A, B; string[] str = Console.ReadLine().Split(' '); H = int.Parse(str[0]); W = int.Parse(str[1]); A = int.Parse(str[2]); B = int.Parse(str[3]); FiniteField.Factorial(W + H); FiniteField[] T = new FiniteField[W]; for (int i = 0; i < W - B; i++) { T[i] = FiniteField.nCm(H - A - 1 + B + i, H - A - 1); } FiniteField sum = 0; for (int i = 0; i < W - B; i++) { sum += T[i] * FiniteField.nCm(W - B - 1 - i + A - 1, A - 1); } Console.WriteLine(sum.ToString()); }
void FindOrderThreaded() { try { int p = (int)Tab1nupFieldSize.Value; if (!MathTools.IsPrime(p)) { MessageBox.Show("Finite Field size must be a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } FiniteField F = new FiniteField(p); Polynomial P = Polynomial.Parse(F, Tab1txtPolyCoefs.Text.Trim(), true); Tab1lblResult.Text = ""; Tab1lblResult.Text += "Recognized polynomial: " + P.ToString() + "\r\n\r\nComputing the order...\r\n\r\n"; Application.DoEvents(); int order = P.Order; Tab1lblResult.Text += "Order of the polynomial is " + order.ToString(); } catch (Exception exp) { MessageBox.Show(exp.Message); } }
private void txtSize_Leave(object sender, EventArgs e) { int t = 0; bool dene = int.TryParse(txtSize.Text.Trim(), out t); if (dene) { if (MathTools.IsPrime(t)) { eskip = p; p = t; F = new FiniteField(p); lblInfo.Text = "Current Field: " + F.ToString(); if (eskip > p) { txtSeq.Clear(); txtResult.Clear(); } } else { MessageBox.Show("Please enter a prime number!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtSize.Focus(); } } else { MessageBox.Show("Please check the value you have written!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtSize.Focus(); } }
public void DivideByZeroThrowsExeption() { FiniteField.Mod = 17; var x = new FiniteField(9); var y = new FiniteField(0); Assert.Throws <DivideByZeroException>(() => x / y); }
public void AddTwoNumbers() { FiniteField.Mod = 17; var x = new FiniteField(9); var y = new FiniteField(12); var actual = x + y; var expected = new FiniteField(4); Assert.Equal(actual, expected); }
public void MultiplyTwoNumbers() { FiniteField.Mod = 17; var x = new FiniteField(9); var y = new FiniteField(12); var actual = x * y; var expected = new FiniteField((9 * 12) % FiniteField.Mod); Assert.Equal(actual, expected); }
public void DivideTwoNumbers() { FiniteField.Mod = 17; var x = new FiniteField(9); var y = new FiniteField(12); var actual = x / y; var expected = new FiniteField(5); Assert.Equal(actual, expected); }
protected void btnRunBM_Click(object sender, EventArgs e) { FiniteField F = null; int p = int.Parse(txtSize.Text.Trim()); if (MathTools.IsPrime(p)) { F = new FiniteField(p); } else { Response.Clear(); Response.Write("Please write a prime number!"); Response.End(); } // Clean The Mess string seq = txtSeq.Text, newseq = ""; for (int i = 0; i < seq.Length; i++) { int t = 0; bool dene = int.TryParse(seq[i].ToString(), out t); if (dene) { if (t < F.Characteristic) { newseq += seq[i]; } } } if (newseq.Length == 0) { Response.Clear(); Response.Write("Please enter the sequence."); Response.End(); } txtSeq.Text = newseq; Polynomial poly = Polynomial.Parse(F, newseq, false); Polynomial c; int LC = LFSRTools.BerlekampMassey(poly, out c); lblResult.Text = "Sequence Length = " + newseq.Length + "<br/>" + "Linear Complexity = " + LC + "<br/>" + "Connection Polynomial = " + c.ToString(); }
public static void Main() { string[] s = Console.ReadLine().Split(' '); int H = int.Parse(s[0]); int W = int.Parse(s[1]); int K = int.Parse(s[2]); FiniteField[][] dp = new FiniteField[H + 1][]; for (int i = 0; i <= H; i++) { dp[i] = new FiniteField[W]; } FiniteField[] com = new FiniteField[W + 1]; com[0] = new FiniteField(1); if (W > 1) { com[1] = new FiniteField(1); } for (int i = 2; i <= W; i++) { com[i] = com[i - 1] + com[i - 2]; } Func <int, FiniteField> Combination = x => (1 <= x && x <= W) ? com[x] : new FiniteField(1); Func <int, int, FiniteField> Access = (i, j) => (0 <= i && i <= H && 0 <= j && j < W) ? dp[i][j] : new FiniteField(0); dp[0][0] = new FiniteField(1); for (int i = 1; i <= H; i++) { for (int j = 0; j < W; j++) { dp[i][j] = Access(i - 1, j) * Combination(j - 0) * Combination(W - j - 1) + Access(i - 1, j - 1) * Combination(j - 1) * Combination(W - j - 1) + Access(i - 1, j + 1) * Combination(j - 0) * Combination(W - j - 2); } } Console.WriteLine(dp[H][K - 1]); }
void GetTab2Ready() { // Finite Field F3 = new FiniteField(3); // LFSR 1 - 3 string strf1 = "201", stri1 = "001"; Polynomial feedback1 = Polynomial.Parse(F3, strf1, false); Polynomial initial1 = Polynomial.Parse(F3, stri1, false); L1 = new LFSR(feedback1, initial1.Coefficients); Tab2lblLFSR1.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf1, false).ToString() + "\r\nInitial: " + stri1 + "\r\nPeriod = " + L1.Period; // LFSR 2 - 4 string strf2 = "2001", stri2 = "0001"; Polynomial feedback2 = Polynomial.Parse(F3, strf2, false); Polynomial initial2 = Polynomial.Parse(F3, stri2, false); L2 = new LFSR(feedback2, initial2.Coefficients); Tab2lblLFSR2.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "2" + strf2, false).ToString() + "\r\nInitial: " + stri2 + "\r\nPeriod = " + L2.Period; // LFSR 3 - 5 string strf3 = "20001", stri3 = "00001"; Polynomial feedback3 = Polynomial.Parse(F3, strf3, false); Polynomial initial3 = Polynomial.Parse(F3, stri3, false); L3 = new LFSR(feedback3, initial3.Coefficients); Tab2lblLFSR3.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf3, false).ToString() + "\r\nInitial: " + stri3 + "\r\nPeriod = " + L3.Period; // LFSR 4 - 7 string strf4 = "0000201", stri4 = "1012220"; Polynomial feedback4 = Polynomial.Parse(F3, strf4, false); Polynomial initial4 = Polynomial.Parse(F3, stri4, false); L4 = new LFSR(feedback4, initial4.Coefficients); Tab2lblLFSR4.Text += "\r\n" + "Feedback: " + Polynomial.Parse(F3, "1" + strf4, false).ToString() + "\r\nInitial: " + stri4 + "\r\nPeriod = 26 (precomputed)";// +L4.Period; // Nonlinear Combiner NonlinCombOutput = ""; Tab2lblNonLinComb.Text += "\r\n(X1+X3) * (X2+X4)"; }
public void Exponentiation(FiniteField a, long pow, FiniteField result) { Assert.True(FiniteField.Pow(a, pow) == result); }
public void Division(FiniteField a, FiniteField b, FiniteField result) { Assert.True(a / b == result); }
public void Multiply(FiniteField a, FiniteField b, FiniteField result) { Assert.True(a * b == result); }
public void Subtraction(FiniteField a, FiniteField b, FiniteField result) { Assert.True(a - b == result); }
public void Addition(FiniteField a, FiniteField b, FiniteField result) { Assert.True(a + b == result); }
public void NonEquality(FiniteField a, FiniteField b) { Assert.NotEqual(a, b); }
public void Equality(FiniteField a, FiniteField b) { Assert.Equal(a, b); }
public static void Main() { int N = int.Parse(Console.ReadLine()); FiniteField[][][][] dp = new FiniteField[N + 1][][][]; for (int i = 0; i <= N; i++) { dp[i] = new FiniteField[4][][]; for (int j = 0; j < 4; j++) { dp[i][j] = new FiniteField[4][]; for (int k = 0; k < 4; k++) { dp[i][j][k] = new FiniteField[4]; } } } dp[3][0][0][0] = 1; dp[3][0][0][1] = 1; dp[3][0][0][2] = 1; dp[3][0][0][3] = 1; dp[3][0][1][0] = 1; dp[3][0][1][1] = 1; dp[3][0][1][2] = 1; dp[3][0][1][3] = 1; dp[3][0][2][0] = 1; dp[3][0][2][1] = 1; dp[3][0][2][2] = 1; dp[3][0][2][3] = 1; dp[3][0][3][0] = 1; dp[3][0][3][1] = 1; dp[3][0][3][2] = 1; dp[3][0][3][3] = 1; dp[3][1][0][0] = 1; dp[3][1][0][1] = 1; dp[3][1][0][2] = 1; dp[3][1][0][3] = 1; dp[3][1][1][0] = 1; dp[3][1][1][1] = 1; dp[3][1][1][2] = 1; dp[3][1][1][3] = 1; dp[3][1][2][0] = 0; dp[3][1][2][1] = 1; dp[3][1][2][2] = 1; dp[3][1][2][3] = 1; dp[3][1][3][0] = 1; dp[3][1][3][1] = 1; dp[3][1][3][2] = 1; dp[3][1][3][3] = 1; dp[3][2][0][0] = 1; dp[3][2][0][1] = 0; dp[3][2][0][2] = 1; dp[3][2][0][3] = 1; dp[3][2][1][0] = 0; dp[3][2][1][1] = 1; dp[3][2][1][2] = 1; dp[3][2][1][3] = 1; dp[3][2][2][0] = 1; dp[3][2][2][1] = 1; dp[3][2][2][2] = 1; dp[3][2][2][3] = 1; dp[3][2][3][0] = 1; dp[3][2][3][1] = 1; dp[3][2][3][2] = 1; dp[3][2][3][3] = 1; dp[3][3][0][0] = 1; dp[3][3][0][1] = 1; dp[3][3][0][2] = 1; dp[3][3][0][3] = 1; dp[3][3][1][0] = 1; dp[3][3][1][1] = 1; dp[3][3][1][2] = 1; dp[3][3][1][3] = 1; dp[3][3][2][0] = 1; dp[3][3][2][1] = 1; dp[3][3][2][2] = 1; dp[3][3][2][3] = 1; dp[3][3][3][0] = 1; dp[3][3][3][1] = 1; dp[3][3][3][2] = 1; dp[3][3][3][3] = 1; for (int i = 4; i <= N; i++) { dp[i][0][0][0] = dp[i - 1][0][0][0] + dp[i - 1][0][0][1] + dp[i - 1][0][0][2] + dp[i - 1][0][0][3]; dp[i][0][0][1] = dp[i - 1][0][1][0] + dp[i - 1][0][1][1] + dp[i - 1][0][1][2] + dp[i - 1][0][1][3]; dp[i][0][0][2] = dp[i - 1][0][2][0] + dp[i - 1][0][2][1] + dp[i - 1][0][2][2] + dp[i - 1][0][2][3]; dp[i][0][0][3] = dp[i - 1][0][3][0] + dp[i - 1][0][3][1] + dp[i - 1][0][3][2] + dp[i - 1][0][3][3]; dp[i][0][1][0] = dp[i - 1][1][0][0] + dp[i - 1][1][0][1] + dp[i - 1][1][0][2] + dp[i - 1][1][0][3]; dp[i][0][1][1] = dp[i - 1][1][1][0] + dp[i - 1][1][1][1] + dp[i - 1][1][1][2] + dp[i - 1][1][1][3]; dp[i][0][1][2] = dp[i - 1][1][2][0] + dp[i - 1][1][2][1] + dp[i - 1][1][2][2] + dp[i - 1][1][2][3]; dp[i][0][1][3] = dp[i - 1][1][3][0] + dp[i - 1][1][3][1] + dp[i - 1][1][3][2] + dp[i - 1][1][3][3]; dp[i][0][2][0] = dp[i - 1][2][0][0] + dp[i - 1][2][0][1] + dp[i - 1][2][0][2] + dp[i - 1][2][0][3]; dp[i][0][2][1] = dp[i - 1][2][1][0] + dp[i - 1][2][1][1] + dp[i - 1][2][1][2] + dp[i - 1][2][1][3]; dp[i][0][2][2] = dp[i - 1][2][2][0] + dp[i - 1][2][2][1] + dp[i - 1][2][2][2] + dp[i - 1][2][2][3]; dp[i][0][2][3] = dp[i - 1][2][3][0] + dp[i - 1][2][3][1] + dp[i - 1][2][3][2] + dp[i - 1][2][3][3]; dp[i][0][3][0] = dp[i - 1][3][0][0] + dp[i - 1][3][0][1] + dp[i - 1][3][0][2] + dp[i - 1][3][0][3]; dp[i][0][3][1] = dp[i - 1][3][1][0] + dp[i - 1][3][1][1] + dp[i - 1][3][1][2] + dp[i - 1][3][1][3]; dp[i][0][3][2] = dp[i - 1][3][2][0] + dp[i - 1][3][2][1] + dp[i - 1][3][2][2] + dp[i - 1][3][2][3]; dp[i][0][3][3] = dp[i - 1][3][3][0] + dp[i - 1][3][3][1] + dp[i - 1][3][3][2] + dp[i - 1][3][3][3]; dp[i][1][0][0] = dp[i - 1][0][0][0] + dp[i - 1][0][0][1] + dp[i - 1][0][0][2] + dp[i - 1][0][0][3]; dp[i][1][0][1] = dp[i - 1][0][1][0] + dp[i - 1][0][1][1] + dp[i - 1][0][1][2] + dp[i - 1][0][1][3]; dp[i][1][0][2] = dp[i - 1][0][2][0] + dp[i - 1][0][2][1] + dp[i - 1][0][2][2] + dp[i - 1][0][2][3]; dp[i][1][0][3] = dp[i - 1][0][3][0] + dp[i - 1][0][3][1] + dp[i - 1][0][3][2] + dp[i - 1][0][3][3]; dp[i][1][1][0] = dp[i - 1][1][0][0] + dp[i - 1][1][0][1] + dp[i - 1][1][0][2] + dp[i - 1][1][0][3]; dp[i][1][1][1] = dp[i - 1][1][1][0] + dp[i - 1][1][1][1] + dp[i - 1][1][1][2] + dp[i - 1][1][1][3]; dp[i][1][1][2] = dp[i - 1][1][2][0] + dp[i - 1][1][2][1] + dp[i - 1][1][2][2] + dp[i - 1][1][2][3]; dp[i][1][1][3] = dp[i - 1][1][3][0] + dp[i - 1][1][3][1] + dp[i - 1][1][3][2] + dp[i - 1][1][3][3]; dp[i][1][2][0] = 0; dp[i][1][2][1] = dp[i - 1][2][1][0] + dp[i - 1][2][1][1] + dp[i - 1][2][1][2] + dp[i - 1][2][1][3]; dp[i][1][2][2] = dp[i - 1][2][2][0] + dp[i - 1][2][2][1] + dp[i - 1][2][2][2] + dp[i - 1][2][2][3]; dp[i][1][2][3] = dp[i - 1][2][3][0] + dp[i - 1][2][3][1] + dp[i - 1][2][3][2] + dp[i - 1][2][3][3]; dp[i][1][3][0] = dp[i - 1][3][0][0] + dp[i - 1][3][0][1] + dp[i - 1][3][0][2] + dp[i - 1][3][0][3]; dp[i][1][3][1] = dp[i - 1][3][1][0] + dp[i - 1][3][1][1] + dp[i - 1][3][1][2] + dp[i - 1][3][1][3]; dp[i][1][3][2] = dp[i - 1][3][2][0] + dp[i - 1][3][2][1] + dp[i - 1][3][2][2] + dp[i - 1][3][2][3]; dp[i][1][3][3] = dp[i - 1][3][3][0] + dp[i - 1][3][3][1] + dp[i - 1][3][3][2] + dp[i - 1][3][3][3]; dp[i][2][0][0] = dp[i - 1][0][0][0] + dp[i - 1][0][0][1] + dp[i - 1][0][0][2] + dp[i - 1][0][0][3]; dp[i][2][0][1] = 0; dp[i][2][0][2] = dp[i - 1][0][2][0] + dp[i - 1][0][2][1] + dp[i - 1][0][2][2] + dp[i - 1][0][2][3]; dp[i][2][0][3] = dp[i - 1][0][3][0] + dp[i - 1][0][3][1] + dp[i - 1][0][3][2] + dp[i - 1][0][3][3]; dp[i][2][1][0] = 0; dp[i][2][1][1] = dp[i - 1][1][1][1] + dp[i - 1][1][1][2] + dp[i - 1][1][1][3]; dp[i][2][1][2] = dp[i - 1][1][2][1] + dp[i - 1][1][2][2] + dp[i - 1][1][2][3]; dp[i][2][1][3] = dp[i - 1][1][3][1] + dp[i - 1][1][3][2] + dp[i - 1][1][3][3]; dp[i][2][2][0] = dp[i - 1][2][0][0] + dp[i - 1][2][0][1] + dp[i - 1][2][0][2] + dp[i - 1][2][0][3]; dp[i][2][2][1] = dp[i - 1][2][1][1] + dp[i - 1][2][1][2] + dp[i - 1][2][1][3]; dp[i][2][2][2] = dp[i - 1][2][2][0] + dp[i - 1][2][2][1] + dp[i - 1][2][2][2] + dp[i - 1][2][2][3]; dp[i][2][2][3] = dp[i - 1][2][3][0] + dp[i - 1][2][3][1] + dp[i - 1][2][3][2] + dp[i - 1][2][3][3]; dp[i][2][3][0] = dp[i - 1][3][0][0] + dp[i - 1][3][0][1] + dp[i - 1][3][0][2] + dp[i - 1][3][0][3]; dp[i][2][3][1] = dp[i - 1][3][1][1] + dp[i - 1][3][1][2] + dp[i - 1][3][1][3]; dp[i][2][3][2] = dp[i - 1][3][2][0] + dp[i - 1][3][2][1] + dp[i - 1][3][2][2] + dp[i - 1][3][2][3]; dp[i][2][3][3] = dp[i - 1][3][3][0] + dp[i - 1][3][3][1] + dp[i - 1][3][3][2] + dp[i - 1][3][3][3]; dp[i][3][0][0] = dp[i - 1][0][0][0] + dp[i - 1][0][0][1] + dp[i - 1][0][0][2] + dp[i - 1][0][0][3]; dp[i][3][0][1] = dp[i - 1][0][1][0] + dp[i - 1][0][1][1] + dp[i - 1][0][1][2] + dp[i - 1][0][1][3]; dp[i][3][0][2] = dp[i - 1][0][2][0] + dp[i - 1][0][2][1] + dp[i - 1][0][2][2] + dp[i - 1][0][2][3]; dp[i][3][0][3] = dp[i - 1][0][3][0] + dp[i - 1][0][3][1] + dp[i - 1][0][3][2] + dp[i - 1][0][3][3]; dp[i][3][1][0] = dp[i - 1][1][0][0] + dp[i - 1][1][0][1] + dp[i - 1][1][0][2] + dp[i - 1][1][0][3]; dp[i][3][1][1] = dp[i - 1][1][1][0] + dp[i - 1][1][1][1] + dp[i - 1][1][1][2] + dp[i - 1][1][1][3]; dp[i][3][1][2] = dp[i - 1][1][2][0] + dp[i - 1][1][2][1] + dp[i - 1][1][2][2] + dp[i - 1][1][2][3]; dp[i][3][1][3] = dp[i - 1][1][3][0] + dp[i - 1][1][3][1] + dp[i - 1][1][3][2] + dp[i - 1][1][3][3]; dp[i][3][2][0] = dp[i - 1][2][0][0] + dp[i - 1][2][0][1] + dp[i - 1][2][0][2] + dp[i - 1][2][0][3]; dp[i][3][2][1] = dp[i - 1][2][1][0] + dp[i - 1][2][1][1] + dp[i - 1][2][1][2] + dp[i - 1][2][1][3]; dp[i][3][2][2] = dp[i - 1][2][2][0] + dp[i - 1][2][2][1] + dp[i - 1][2][2][2] + dp[i - 1][2][2][3]; dp[i][3][2][3] = dp[i - 1][2][3][0] + dp[i - 1][2][3][1] + dp[i - 1][2][3][2] + dp[i - 1][2][3][3]; dp[i][3][3][0] = dp[i - 1][3][0][0] + dp[i - 1][3][0][1] + dp[i - 1][3][0][2] + dp[i - 1][3][0][3]; dp[i][3][3][1] = dp[i - 1][3][1][0] + dp[i - 1][3][1][1] + dp[i - 1][3][1][2] + dp[i - 1][3][1][3]; dp[i][3][3][2] = dp[i - 1][3][2][0] + dp[i - 1][3][2][1] + dp[i - 1][3][2][2] + dp[i - 1][3][2][3]; dp[i][3][3][3] = dp[i - 1][3][3][0] + dp[i - 1][3][3][1] + dp[i - 1][3][3][2] + dp[i - 1][3][3][3]; } Console.WriteLine( dp[N][0][0][0] + dp[N][0][0][1] + dp[N][0][0][2] + dp[N][0][0][3] + dp[N][0][1][0] + dp[N][0][1][1] + dp[N][0][1][2] + dp[N][0][1][3] + dp[N][0][2][0] + dp[N][0][2][1] + dp[N][0][2][2] + dp[N][0][2][3] + dp[N][0][3][0] + dp[N][0][3][1] + dp[N][0][3][2] + dp[N][0][3][3] + dp[N][1][0][0] + dp[N][1][0][1] + dp[N][1][0][2] + dp[N][1][0][3] + dp[N][1][1][0] + dp[N][1][1][1] + dp[N][1][1][2] + dp[N][1][1][3] + dp[N][1][2][0] + dp[N][1][2][1] + dp[N][1][2][2] + dp[N][1][2][3] + dp[N][1][3][0] + dp[N][1][3][1] + dp[N][1][3][2] + dp[N][1][3][3] + dp[N][2][0][0] + dp[N][2][0][1] + dp[N][2][0][2] + dp[N][2][0][3] + dp[N][2][1][0] + dp[N][2][1][1] + dp[N][2][1][2] + dp[N][2][1][3] + dp[N][2][2][0] + dp[N][2][2][1] + dp[N][2][2][2] + dp[N][2][2][3] + dp[N][2][3][0] + dp[N][2][3][1] + dp[N][2][3][2] + dp[N][2][3][3] + dp[N][3][0][0] + dp[N][3][0][1] + dp[N][3][0][2] + dp[N][3][0][3] + dp[N][3][1][0] + dp[N][3][1][1] + dp[N][3][1][2] + dp[N][3][1][3] + dp[N][3][2][0] + dp[N][3][2][1] + dp[N][3][2][2] + dp[N][3][2][3] + dp[N][3][3][0] + dp[N][3][3][1] + dp[N][3][3][2] + dp[N][3][3][3] ); }