Предмет: Информатика, автор: mashaslimoflow

Решите в Pascal ABC
На вход программе подаются 4 целых числа, по модулю не превосходящие 10^6: m,n,k,l. Если остаток от деления m на n равен k или l, то выведите 1, в противном случае - любое другое число.
Условный оператор использовать нельзя!


Indentuum: В каком классе учитесь?
Indentuum: Можно использовать такую формулу: ((m mod n) xor k) and ((m mod n) xor l) + 1
Indentuum: Проблема в том, что ((m mod n) xor k) и ((m mod n) xor l) могут не иметь общих битов в своей двоичной записи
Indentuum: Хмм, можно кое-что другое...

Ответы

Автор ответа: Indentuum
0

var m, n, k, l : longint;

begin

readln(m, n, k, l);

writeln(((m mod n) xor k) * ((m mod n) xor l) + 1);

end.


Работает программа следующим образом:

Если провести операцию XOR с двумя равными числами, то ответом будет 0.

Если остаток от деления равен k или l, то одна из скобок равна 0, что при умножении даст 0. Для выполнения условия задачи добавим 1.

Похожие вопросы