ДЛЯ ДОЛГОВРЕМЕННОГО ХРАНЕНИЯ ОПЕРАЦИОННЫХ СИСТЕМ , ЕЖЕДНЕВНО ИСПОЛЬЗУЕМЫХ ПРОГРАММ И ДАННЫХ
01001100=2^2+2^3+2^6=4+8+64=76
00010101=2^0+2^2+2^4=1+4+16=21
Переводим в двоичную систему:
– Первое условие: x & 1010 ≠ 0
Условие истинно для x, у которых первый или третий бит ненулевые (биты я считаю справа налево, начиная с нуля)
– Второе условие: (x & 100111 = 0) && (x & 10010101 = 0)
Условие истинно для x, у которых биты 0, 1, 2, 4, 5, 7 нулевые
Нужно поставить третье условие так, чтобы для любого натурального числа выполнялось хотя бы одно из условий, тогда дизъюнкция трёх условий будет истинна. Найдем, какие числа не удовлетворяют первым двум условиям, и подберём третье условие так, чтобы ему все такие числа удовлетворяли:
Первое условие не выполнено для чисел, двоичная запись которых имеет вид ...____0_0_, _ заменяет любую двоичную цифру. Добавляем второе условие: ...?_??0?0?, – на месте по крайней мере одного из вопросиков стоит 1.
Третье условие говорит о том, что на тех местах, где в A единицы, в числе должны стоять нули. Нужно, чтобы этому условию удовлетворяли все "нехорошие числа", про которые мы точно знаем, что в них нули стоят на первом и третьем местах, а в других местах – может стоят, а может и нет. Поэтому подходят только такие натуральные A: 0010, 1000, 1010. Наибольшее из них 1010(2) = 10(10).
Конечно, второе условие можно было бы сразу не рассматривать, если догадаться, о чём идёт речь.
Var sum,i:integer;
begin
sum:=0;
for i:=100 to 999 do
if (i mod 3=0) then sum:=sum+i;
writeln('Сумма трехзначных чисел кратных трем равна ',sum);
<span>end.</span>