Exemple #1
0
        public static void PseudoPrimeTest()
        {
            var count = 0;

            for (ulong i = 2; i < 100; i++)
            {
                if (IntegerMath.IsStrongPseudoprime(i, 50))
                {
                    Console.WriteLine(i);
                    count++;
                }
            }
            Console.WriteLine(count);
        }
Exemple #2
0
        //кнопка построить таблицу
        private void BuildGridButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ulong[] figure; //массив чисел
                var     list  = new List <ulong>();
                char[]  delim = { ' ', ',' };

                //ввод полинома
                if (PolinomTextBox.Text != string.Empty)
                {
                    string   entervalue    = Convert.ToString(PolinomTextBox.Text);
                    string[] arrayofnumber = entervalue.Split(delim, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var w in arrayofnumber)
                    {
                        list.Add(Convert.ToUInt64(w));
                    }
                    figure = list.ToArray();
                }
                else
                {
                    MessageBox.Show("Введите полином!");
                    return;
                }

                //ввод характеристики
                if (CharacteristicTextBox.Text != string.Empty)
                {
                    //проверяем введённые данные
                    string entervalue = Convert.ToString(CharacteristicTextBox.Text);
                    foreach (var t in entervalue)
                    {
                        if (!Char.IsDigit(t))
                        {
                            MessageBox.Show("Введены недопустимые символы!");
                            ClearMethod();
                            return;
                        }
                    }
                    Characteristic = (ulong)Convert.ToInt32(entervalue);
                    var simpleornot = IntegerMath.IsStrongPseudoprime(Characteristic, 50);

                    if (Characteristic < 1)
                    {
                        MessageBox.Show("Характеристика поля должна быть больше нуля!");
                        ClearMethod();
                        return;
                    }
                    if (!simpleornot)
                    {
                        MessageBox.Show("Характеристика поля простым числом!");
                        ClearMethod();
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Введите характеристику!");
                    return;
                }

                Polinom = new Polynomial(figure);
                new GfTable().ShowDialog();
            }
            catch (Exception ex)
            {
                ClearMethod();
                MessageBox.Show(ex.Message);
            }
        }
Exemple #3
0
        //ввести данные
        private void EnterButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int degree;

                //ввод характеристики
                if (CharTextBox.Text != string.Empty)
                {
                    //проверяем введённые данные
                    string entervalue = Convert.ToString(CharTextBox.Text);
                    foreach (var t in entervalue)
                    {
                        if (!Char.IsDigit(t))
                        {
                            MessageBox.Show("Введены недопустимые символы!");
                            ClearMethod();
                            return;
                        }
                    }
                    CharacteristicofField = (ulong)Convert.ToInt64(entervalue);
                    var simpleornot = IntegerMath.IsStrongPseudoprime(CharacteristicofField, 50);

                    if (CharacteristicofField < 1)
                    {
                        MessageBox.Show("Характеристика поля должна быть больше нуля!");
                        ClearMethod();
                        return;
                    }
                    if (!simpleornot)
                    {
                        MessageBox.Show("Характеристика поля простым числом!");
                        ClearMethod();
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Введите характеристику!");
                    return;
                }

                //ввод полинома
                if (PolinomTextBox.Text != string.Empty)
                {
                    var    list  = new List <ulong>();
                    char[] delim = { ' ', ',' };

                    string   entervalue    = Convert.ToString(PolinomTextBox.Text);
                    string[] arrayofnumber = entervalue.Split(delim, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var w in arrayofnumber)
                    {
                        list.Add(Convert.ToUInt64(w));
                    }
                    Figure = list.ToArray();
                    degree = Figure.Length - 1;
                }
                else
                {
                    MessageBox.Show("Введите полином!");
                    return;
                }

                //ввод количества ошибок
                if (CountMistakeTextBox.Text != string.Empty)
                {
                    //проверяем введённые данные
                    string entervalue = Convert.ToString(CountMistakeTextBox.Text);
                    foreach (var t in entervalue)
                    {
                        if (!Char.IsDigit(t))
                        {
                            MessageBox.Show("Введены недопустимые символы!");
                            ClearMethod();
                            return;
                        }
                    }
                    CountMistake = Convert.ToInt32(entervalue);
                    if (CountMistake < 0)
                    {
                        MessageBox.Show("Количество ошибок должно быть больше 0!");
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Введите количество ошибок!");
                    return;
                }

                //проверка неравенства 2*t<q^m-1 (q-характеристика, m-степень полинома, t- кол-во ошибок)
                if (2 * CountMistake >= Math.Pow(CharacteristicofField, degree) - 1)
                {
                    MessageBox.Show(
                        "Должно выполняться неравенство 2*t<q^m-1,\n где q-характеристика поля, m-степень полинома, t- кол-во ошибок");
                    return;
                }

                HidButton(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }