Решите в Pascal ABC ** вход программе подаются 4 целых числа, по модулю не превосходящие...

0 голосов

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


спросил от (12 баллов) в категории Информатика
оставил комментарий от Одаренный (4.7k баллов)

В каком классе учитесь?

оставил комментарий от Одаренный (4.7k баллов)

Можно использовать такую формулу: ((m mod n) xor k) and ((m mod n) xor l) + 1

оставил комментарий от Одаренный (4.7k баллов)

Проблема в том, что ((m mod n) xor k) и ((m mod n) xor l) могут не иметь общих битов в своей двоичной записи

оставил комментарий от Одаренный (4.7k баллов)

Хмм, можно кое-что другое...

1 Ответ
0 голосов
ответил от Одаренный (4.7k баллов)

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.

оставил комментарий от
Да почему везде такой ответ, но если делить будет равен 0, то выбросится исключение за счет деления ** ноль
...