Предмет: Информатика,
автор: mashaslimoflow
Решите в Pascal ABC
На вход программе подаются 4 целых числа, по модулю не превосходящие 10^6: m,n,k,l. Если остаток от деления m на n равен k или l, то выведите 1, в противном случае - любое другое число.
Условный оператор использовать нельзя!
Indentuum:
В каком классе учитесь?
Можно использовать такую формулу: ((m mod n) xor k) and ((m mod n) xor l) + 1
Проблема в том, что ((m mod n) xor k) и ((m mod n) xor l) могут не иметь общих битов в своей двоичной записи
Хмм, можно кое-что другое...
Ответы
Автор ответа:
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.
Похожие вопросы
Предмет: Русский язык,
автор: shahiimransilaalinam
Предмет: Математика,
автор: Igorzzz89
Предмет: Русский язык,
автор: eolenina4
Предмет: Математика,
автор: artem2t
Предмет: Геометрия,
автор: semitzvetik4