С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
67 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 56
1

Решить систему уравнений с побитовыми операциями

03.03.2020, 15:42. Показов 3770. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Assembler
1
2
(a11 & x) ^ (a12 & y) = b1
(a21 & x) ^ (a22 & y) = b2
Мне данны a11,a12,a21,a22,b1,b2.Помогите пожалуйста составить уравнение которое позволит найти x и y.Только пожалуйста не кодом а так же уравнением,писать буду на Ассемблере.Заранее благодарю.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2020, 15:42
Ответы с готовыми решениями:

Работа с побитовыми операциями
помогите с задачкой.. Дан массив чисел. Определить сумму тех элементов массива, двоичные коды...

Помогите разобраться с побитовыми операциями
А точнее как с помощью только побитовых операций и операции сложения проверить делиться ли число a...

Задание, связанное с побитовыми операциями
29^(15 & 9 | 15 & !9) ^ 26 | (9 & 29 | (15 & 9 | !15 & 9) ) & (12 | 12 & 29) ^ 26 ! инверсия...

Массивы. Работа с побитовыми операциями
Помогите с программированием,пожалуйста!!!!!!!!!!!! Дан массив из беззнаковых чисел. Коды четных...

22
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.03.2020, 16:33 2
Код
(a21 & x) ^ (a22 & y) = b2,
a21 & x = b2 ^ (a22 & y),
x = (b2 ^ (a22 & y)) & !a21 + 1
Теперь то, что справа, надо подставить в первое уравнение вместо х и выразить y.
Но это неточно.
1
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
03.03.2020, 16:35 3
x = b1 & a11
y = b1 & !a11 & a12
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.03.2020, 16:47 4
Цитата Сообщение от Annemesski Посмотреть сообщение
Код
x = b1 & a11
y = b1 & !a11 & a12
a21 и a22 на результат не влияют?
0
67 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 56
03.03.2020, 17:45  [ТС] 5
Annemesski,а что означает ! и как мне получить данное представление?
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.03.2020, 17:49 6
Цитата Сообщение от CodeKing Посмотреть сообщение
а что означает !
инверсия.
1
67 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 56
11.03.2020, 18:30  [ТС] 7
Помогите пожалуйста составить уравнение которое находит x и y.Нам известны a11, a12, a21, a22, b1, b2.Просто уравнением код не нужен.Заранее благодарю.

(a11 & x) ^ (a12 & y) = b1
(a21 & x) ^ (a22 & y) = b2
0
Модератор
Эксперт по электронике
8541 / 4393 / 1651
Регистрация: 01.02.2015
Сообщений: 13,649
Записей в блоге: 9
11.03.2020, 19:57 8
Это же не алгебра.
Беглый поиск по фразе "решение булевых уравнений" приводит к массе любопытных методичек, в том числе и для ЕГЭ.
Как понимаю, никто из нас ЕГЭ не сдавал, поэтому булевы уравнения решать не можем.

Из прочтения сделал вывод, что при произвольных значениях a11,a12,a21,a22,b1,b2 система уравнений решается перебором.
Если эти значения известны заранее, то система уравнений принимает некоторый определённый вид, который можно решать аналитически.

Это моё личное мнение.
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
11.03.2020, 20:02 9
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
решение булевых уравнений
А я думал, что это битовые операции с целыми операндами.
0
Модератор
Эксперт по электронике
8541 / 4393 / 1651
Регистрация: 01.02.2015
Сообщений: 13,649
Записей в блоге: 9
11.03.2020, 20:11 10
А есть серьёзная разница?
Пусть весь набор (a11,a12,a21,a22,b1,b2), а так же искомые (x, y) это числа по 32 разряда каждое.
Тогда получаем для каждого номера бита по одной системе уравнений. И для каждой системы отсутствие или несколько решений.
Решая каждую из систем для определённого бита - получаем ответ.
0
Модератор
Эксперт по электронике
8541 / 4393 / 1651
Регистрация: 01.02.2015
Сообщений: 13,649
Записей в блоге: 9
11.03.2020, 20:28 11
Для булевых уравнений и систем уравнений нет простых способов решения, приводящих к аналитическому решению.

Лично моё мнение, что эта система решается перебором четырёх вариантов значений x и y.
При этом, для какого-то конкретного набора параметров (a11,a12,a21,a22,b1,b2) решений может не быть совсем, а может быть до 4 решений (по числу комбинаций x и y).

Возможная оптимизация - сохранение решения для конкретного уже рассмотренного набора (a11,a12,a21,a22,b1,b2) и его повторное использование.

Мне лень, но лично вы можете найти аналитические решения для всех 64 комбинаций бит (a11,a12,a21,a22,b1,b2). А можете их просто перебрать в цикле.
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
11.03.2020, 21:47 12
Лучший ответ Сообщение было отмечено politoto как решение

Решение

Цитата Сообщение от CodeKing Посмотреть сообщение
Только пожалуйста не кодом а так же уравнением
Увы. для 64 вариантов систем уравнений имеем:

нет решений: 25 раз
одно решение: 19 раз
два разных решения: 16 раз
три разных решения: 3 раза
верно при любых x и y: 1 раз

Так что пишем на Ассемблере перебор

Добавлено через 2 минуты
(1 & x) ^ (1 & y) = 1
(1 & x) ^ (1 & y) = 1
(x, y) == (1, 0), (0, 1), (1, 1),
2
67 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 56
11.03.2020, 22:03  [ТС] 13
ФедосеевПавел Программа должна вывести два беззнаковых числа чила x и y, удовлетворяющих данной системе. Гарантируется, что такие числа всегда найдутся. Если у системы уравнений несколько решений - выводите любое.

При решении задачи запрещается использовать инструкции условной передачи данных и управления.

При данном условию есть ли какое то уравнение с помощью которого можно найти x и y при любых значениях остальных переменных?Писать буду на SASM.Я просто слаб в битовых операциях.Просто нужно выразить х как y затем подставить его во второе уравнение.Но вот как незнаю.
0
Модератор
Эксперт по электронике
8541 / 4393 / 1651
Регистрация: 01.02.2015
Сообщений: 13,649
Записей в блоге: 9
11.03.2020, 22:59 14
CodeKing, это лабораторка, вся математика к ней - в методичке или лекциях. А так же - в интернете по запросу "решение булевых уравнений".

Аналитического решения для них всё равно - нет. Иначе бы шифры взламывались очень легко.
Т.е. формул x=f1(a11,a12,a21,a22,b1,b2), y=f2(a11,a12,a21,a22,b1,b2) - не существует.

Могу посоветовать табличный метод. Разных битовых комбинаций параметров (a11,a12,a21,a22,b1,b2) всего 64. Значит для каждой комбинации можно просчитать значения x и y, занести их в массивы на 64 элемента. По очередной комбинации (a11,a12,a21,a22,b1,b2) из двух массивов извлекать x и y. Вот и нет условных переходов и присвоений.
Как вы будете распознавать отсутствие решения без условных переходов - не понятно.

Без шуток - что по поводу решения думают сокурсники и преподаватель? Какие варианты?
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
11.03.2020, 23:47 15
ФедосеевПавел, Для его задачи существует.

Строим таблицу истинности:

Bash
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
a11     a12     a21     a22     b1      b2      x       y
0       0       0       0       0       0       0       0
0       0       0       0       1       0       _       _
0       0       0       0       0       1       _       _
0       0       0       0       1       1       _       _
1       0       0       0       0       0       0       0
1       0       0       0       1       0       1       0
1       0       0       0       0       1       _       _
1       0       0       0       1       1       _       _
0       1       0       0       0       0       0       0
0       1       0       0       1       0       0       1
0       1       0       0       0       1       _       _
0       1       0       0       1       1       _       _
1       1       0       0       0       0       0       0
1       1       0       0       1       0       1       0
1       1       0       0       0       1       _       _
1       1       0       0       1       1       _       _
0       0       1       0       0       0       0       0
0       0       1       0       1       0       _       _
0       0       1       0       0       1       1       0
0       0       1       0       1       1       _       _
1       0       1       0       0       0       0       0
1       0       1       0       1       0       _       _
1       0       1       0       0       1       _       _
1       0       1       0       1       1       1       0
0       1       1       0       0       0       0       0
0       1       1       0       1       0       0       1
0       1       1       0       0       1       1       0
0       1       1       0       1       1       1       1
1       1       1       0       0       0       0       0
1       1       1       0       1       0       0       1
1       1       1       0       0       1       _       _
1       1       1       0       1       1       1       0
0       0       0       1       0       0       0       0
0       0       0       1       1       0       _       _
0       0       0       1       0       1       0       1
0       0       0       1       1       1       _       _
1       0       0       1       0       0       0       0
1       0       0       1       1       0       1       0
1       0       0       1       0       1       0       1
1       0       0       1       1       1       1       1
0       1       0       1       0       0       0       0
0       1       0       1       1       0       _       _
0       1       0       1       0       1       _       _
0       1       0       1       1       1       0       1
1       1       0       1       0       0       0       0
1       1       0       1       1       0       1       0
1       1       0       1       0       1       _       _
1       1       0       1       1       1       0       1
0       0       1       1       0       0       0       0
0       0       1       1       1       0       _       _
0       0       1       1       0       1       1       0
0       0       1       1       1       1       _       _
1       0       1       1       0       0       0       0
1       0       1       1       1       0       _       _
1       0       1       1       0       1       0       1
1       0       1       1       1       1       1       0
0       1       1       1       0       0       0       0
0       1       1       1       1       0       _       _
0       1       1       1       0       1       1       0
0       1       1       1       1       1       0       1
1       1       1       1       0       0       0       0
1       1       1       1       1       0       _       _
1       1       1       1       0       1       _       _
1       1       1       1       1       1       1       0
По ней КНФ, и остаётся только найти способ упростить всё это
0
Модератор
Эксперт по электронике
8541 / 4393 / 1651
Регистрация: 01.02.2015
Сообщений: 13,649
Записей в блоге: 9
12.03.2020, 00:03 16
Да - таблица в виде двух массивов x и y. А индекс - составляется из битов (a11,a12,a21,a22,b1,b2).
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
12.03.2020, 01:59 17
УПС

Закралась в моей программе не простительная ошибка, так что все предыдущие формулы и таблицы были с ошибочкой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
x = (a11 & ~a12 & ~a21 & ~a22 & b1 & ~b2) |
    (a11 & a12 & ~a21 & ~a22 & b1 & ~b2) |
    (~a11 & ~a12 & a21 & ~a22 & ~b1 & b2) |
    (a11 & ~a12 & a21 & ~a22 & b1 & b2) | (~a11 & a12 & a21 & ~a22 & ~b1 & b2) |
    (~a11 & a12 & a21 & ~a22 & b1 & b2) | (a11 & a12 & a21 & ~a22 & ~b1 & b2) |
    (a11 & a12 & a21 & ~a22 & b1 & b2) | (a11 & ~a12 & ~a21 & a22 & b1 & ~b2) |
    (a11 & ~a12 & ~a21 & a22 & b1 & b2) | (a11 & a12 & ~a21 & a22 & b1 & ~b2) |
    (a11 & a12 & ~a21 & a22 & ~b1 & b2) | (~a11 & ~a12 & a21 & a22 & ~b1 & b2) |
    (a11 & ~a12 & a21 & a22 & b1 & ~b2) | (a11 & ~a12 & a21 & a22 & b1 & b2) |
    (~a11 & a12 & a21 & a22 & b1 & ~b2) | (~a11 & a12 & a21 & a22 & ~b1 & b2) |
    (a11 & a12 & a21 & a22 & b1 & b2);
y = (~a11 & a12 & ~a21 & ~a22 & b1 & ~b2) |
    (~a11 & a12 & a21 & ~a22 & b1 & ~b2) | (~a11 & a12 & a21 & ~a22 & b1 & b2) |
    (a11 & a12 & a21 & ~a22 & b1 & ~b2) | (a11 & a12 & a21 & ~a22 & ~b1 & b2) |
    (~a11 & ~a12 & ~a21 & a22 & ~b1 & b2) |
    (a11 & ~a12 & ~a21 & a22 & ~b1 & b2) | (a11 & ~a12 & ~a21 & a22 & b1 & b2) |
    (~a11 & a12 & ~a21 & a22 & b1 & b2) | (a11 & a12 & ~a21 & a22 & ~b1 & b2) |
    (a11 & a12 & ~a21 & a22 & b1 & b2) | (a11 & ~a12 & a21 & a22 & b1 & ~b2) |
    (a11 & ~a12 & a21 & a22 & ~b1 & b2) | (~a11 & a12 & a21 & a22 & b1 & ~b2) |
    (~a11 & a12 & a21 & a22 & b1 & b2);
Лучше не стало
0
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
12.03.2020, 06:19 18
Мне данны a11,a12,a21,a22,b1,b2.
То есть известны конкретные значения?

Добавлено через 38 минут
У меня сошлось только при a11,a12,a21,a22,b1,b2=0. Может где-то накосячил?
Кликните здесь для просмотра всего текста
Delphi
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
{$APPTYPE CONSOLE}
var
  i:     longword;
  coeff: packed record
         case byte of
         0:(a11,a12,a21,a22,b1,b2: byte);
         1:(z:   int64);
         end;
begin
  for i:=0 to 63 do
    with coeff do
    begin
      //эмуляция pdep
      z:=(i*$0101010101010101) and $8040201008040201;
      a12:=a12 shr 1;
      a21:=a21 shr 2;
      a22:=a22 shr 3;
      b1 :=b1  shr 4;
      b2 :=b2  shr 5;
      //проверка выражения для всех комбинаций x и y
      if (((a11 and 0)xor(a12 and 0)=b1)and((a21 and 0)xor(a22 and 0)=b2))and
         (((a11 and 0)xor(a12 and 1)=b1)and((a21 and 0)xor(a22 and 1)=b2))and
         (((a11 and 1)xor(a12 and 0)=b1)and((a21 and 1)xor(a22 and 0)=b2))and
         (((a11 and 1)xor(a12 and 1)=b1)and((a21 and 1)xor(a22 and 1)=b2))then
      begin
        writeln('(',a11,'&x)^(',a12,'&y)=',b1);
        writeln('(',a21,'&x)^(',a22,'&y)=',b2);
      end;
    end;
    readln;
end.
0
Заблокирован
12.03.2020, 06:21 19
если перебирать в пределах самого "длинного" в битах числа
C++
1
2
3
4
5
6
7
8
9
10
11
    int a11=1,a12=2,b1=3;
    //cout<<"a11 a12 b1: ";
    //cin>>a11>>a12>>b1;
    int a21=4,a22=5,b2=1;
    //cout<<"a21 a22 b2: ";
    //cin>>a21>>a22>>b2;
    for(int x=0; x<=7; x++)
        for(int y=0; y<=7; y++)
            if((a11 & x ^ a12 & y) == b1)
            if((a21 & x ^ a22 & y) == b2)
                cout<<x<<" "<<y<<endl;//4 решения
0
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
12.03.2020, 07:31 20
Да с кодом я тупанул.

Добавлено через 6 минут
Verevkin
a21 & x = b2 ^ (a22 & y),
x = (b2 ^ (a22 & y)) & !a21 + 1
Это ведь всё равно, что утверждать
z&x=y
x=y&!z+1
Подставим произвольные значения x=0, y=0, z=1
1&0=0 - верно
0=0&!1+1=0&0+1=1 - не верно

Добавлено через 23 минуты
Мне кажется,что операции & и + в отличие от ^ и ! необратимы. Следовательно решение возможно только перебором.

То есть операция x&0 необратимо уничтожит информацию, содержащуюся в x. А вот ^ можно обратить (X^Y)^Y=X.
0
12.03.2020, 07:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2020, 07:31
Помогаю со студенческими работами здесь

Побитовыми операциями вычесть два числа
вычесть из числа, введенного пользователем, число 3 используя ТОЛЬКО побитовые операции.помогите...

Побитовыми операциями поменять местами в числе по 2 бита
Задали побитовыми операциями поменять местами в числе по 2 бита то есть в веденном числе последние...

Решить систему уравнений
12x^2+18xy+9y^2+2x+2y=0 9x^2+18xy+24y^2+2x+4y=0 Пробовала вычесть и подставить, но ничего...

решить систему из 4-х уравнений
помогите написать в паскале пожалуйста!!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru