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

0 голосов
261 просмотров

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


Информатика (12 баллов) | 261 просмотров
0

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

0

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

0

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

0

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

Дан 1 ответ
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.

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