Форум программистов, компьютерный форум CyberForum.ru

Многочлены над GF(2^m) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл вычисления бесконечной суммы http://www.cyberforum.ru/cpp-beginners/thread689595.html
#include<iostream> #include<math.h> using namespace std; int main () {double k=0; double a=0; double e=0.001; while(a>=e)
C++ Проверьте пожалуйста код на правильность ! ! ! 2. Дан массив размера 5 x 6 с элементами целого типа. Написать программу для вычисления числа элементов массива кратных 3. За ранее спасибо ! #include "stdafx.h" #include <conio.h> #include <stdio.h> #include <math.h> void main () { int M; http://www.cyberforum.ru/cpp-beginners/thread689590.html
C++ Подключение файлов в проект
Здравствуйте. Запутался немного с подключением файлов, подскажите как лучше организовать. Собственно прикладываю картинку со схемой подключений и сам проект(сильно упрощенный, но нужные связи есть).
C++ в php var_Dump , в c++ есть подобное?
в php var_dump , в c++ есть подобное?
C++ рекурсивный ввод элементов http://www.cyberforum.ru/cpp-beginners/thread689564.html
И еще одна задача по рекурсии:( не пиайте сильно, но теперь совсем простая. Задача написать функцию, по рекурсивному вводу элементов матрицы. Опять же, можно только идею:(.
C++ что не так? /*задано масcив цеых чисел,создать новый массив который состоит с елементов первого массива и встречаеться всего один раз . получить сумму нового массива, середнее арифметическое , максимальный и минимальный елемент*/ #include<iostream.h> #include<conio.h> int main() { int A; int max,min,sz,n,i,j,s; cout<<"n="; cin>>n; подробнее

Показать сообщение отдельно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 20:34  [ТС]     Многочлены над GF(2^m)
Аааа, помогите!!! Программа не хочет правильно умножать многочлены
Пишу такой код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* * * * * * * * * * * * * * * * * * * * * * *
                main.cpp
* * * * * * * * * * * * * * * * * * * * * * */
 
#include <iostream>
#include "RS_encoder.h"
 
int main()
{
    std::string str_mess1, str_mess2;
 
    std::cout << "IT'S POLYNOM TEST" << std::endl << std::endl;
    std::cout << "Group degree = " << GROUP_DEGREE << std::endl;
    std::cout << "Maximum message length = " << MESSAGE_LENGTH * GROUP_DEGREE << " bits" << std::endl;
    std::cout << "Maximum number of errors = " << MAX_ERRORS << " symbols" << std::endl;
    std::cout << "--------------------------------------------" << std::endl;
 
    std::cout << "input 1st message: ";
    std::cin >> str_mess1;
    GF_polynom polynom1 (message_to_GF_message (str_to_int (str_mess1)));
 
    std::cout << std::endl << "input 2nd message: ";
    std::cin >> str_mess2;
    GF_polynom polynom2 (message_to_GF_message (str_to_int (str_mess2)));
 
    std::cout << std::endl << "------------------------------------------" << std::endl;
 
    std::vector<GF> temp_GF_vec (polynom1.return_coefficients());
    
    std::cout << "1st messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    int temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    
    temp_GF_vec = polynom2.return_coefficients();
    
    std::cout << "2nd messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    GF_polynom polynom3 = polynom1 * polynom2;
 
    temp_GF_vec = polynom3.return_coefficients();
    
    std::cout << "Product of polynom1 and polynom2:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    std::cin.get();
    std::cin.get();
}

а оно мне неправильно считает. Например:
http://www.cyberforum.ru/cgi-bin/latex.cgi?m=2 и примитивный полином http://www.cyberforum.ru/cgi-bin/latex.cgi?g(x)=x^2+x+1. Тогда, если http://www.cyberforum.ru/cgi-bin/latex.cgi?g(\alpha )=0, то http://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^2)=\{0,\alpha ^0,\alpha ^1,\alpha ^2\}=\{0,1,\alpha ,1+\alpha \}=\{00,10,01,11\} и http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^3=\alpha ^0. Допустим, наш код не умеет исправлять ошибки (т.е. умеет только их выявлять): http://www.cyberforum.ru/cgi-bin/latex.cgi?t=0, len(M)=2\cdot (2^2-1-2\cdot 0)=2\cdot 3=6. Вводим два сообщения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1=101011=\alpha ^0\alpha ^0\alpha ^2, M_1(x)=\alpha ^0+\alpha ^0x+\alpha ^2 x^2
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_2=110110=\alpha ^2\alpha ^1\alpha ^0, M_2(x)=\alpha ^2 +\alpha ^1x+\alpha ^0x^2
Тогда
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^0\cdot \alpha ^2 + (\alpha ^0\cdot \alpha ^1 +\alpha ^0\cdot \alpha ^2)x+(\alpha ^0\cdot \alpha ^0+\alpha ^0\cdot\alpha ^1+\alpha ^2\cdot \alpha ^2)x^2+(\alpha ^0\cdot\alpha ^0+\alpha ^2\cdot\alpha ^1)x^3+\alpha ^2\cdot\alpha ^0 x^4=
http://www.cyberforum.ru/cgi-bin/latex.cgi?=\alpha ^2+(\alpha ^1+\alpha ^2)x+(\alpha ^0+\alpha ^1+\alpha ^4)x^2+(\alpha ^0+\alpha ^3)x^3+\alpha ^2x^4=
Найдём http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^4=\alpha ^{1+3}=\alpha ^1\cdot\alpha ^3=\alpha ^1\cdot\alpha ^0=\alpha ^{1+0}=\alpha ^ 1 и заменим все альфы векторами:
http://www.cyberforum.ru/cgi-bin/latex.cgi?=11+(01+11)x+(10+01+01)x^2+(10+10)x^3+11x^4=11+10x+10x^2+00x^3+11x^4=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4
Т.е.
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4, M_1\cdot M_2=1110100011,
а программа выдаёт
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^2x+\alpha ^1x^2+\alpha ^0 x^3+\alpha ^2x^4, M_1\cdot M_2=1111011011
Помогите, пожалуйста!

Добавлено через 10 минут
И ещё вопрос: как вставить в начало массива N нулей. Я делал так:
реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
 
Текущее время: 12:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru