Задания
Версия для печати и копирования в MS Word
Тип Д15 № 10392
i

Обо­зна­чим через m&n по­раз­ряд­ную конъ­юнк­цию не­от­ри­ца­тель­ных целых чисел m и n.

Так, на­при­мер, 14&5  =  11102&01012 = 01002 = 4.

Для ка­ко­го наи­мень­ше­го не­от­ри­ца­тель­но­го це­ло­го числа А фор­му­ла

 левая круг­лая скоб­ка левая круг­лая скоб­ка x\28 не равно 0 пра­вая круг­лая скоб­ка \vee левая круг­лая скоб­ка x\45 не равно 0 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка arrow левая круг­лая скоб­ка левая круг­лая скоб­ка x\17=0 пра­вая круг­лая скоб­ка arrow левая круг­лая скоб­ка x\A не равно 0 пра­вая круг­лая скоб­ка пра­вая круг­лая скоб­ка

тож­де­ствен­но ис­тин­на (то есть при­ни­ма­ет зна­че­ние 1 при любом не­от­ри­ца­тель­ном целом зна­че­нии пе­ре­мен­ной x)?

Спрятать решение

Ре­ше­ние.

Пре­об­ра­зу­ем вы­ра­же­ние по за­ко­нам ал­геб­ры ло­ги­ки:

(¬Х + ¬Y) → (W → ¬Z) = ¬(¬Х + ¬Y) + (¬W + ¬Z) = ХY + ¬(WZ) = WZ → XY.

Далее при­ме­ня­ем обо­зна­че­ния и ре­а­ли­зу­ем спо­соб ре­ше­ния, из­ло­жен­ный К. Ю. По­ля­ко­вым в тео­ре­ти­че­ских ма­те­ри­а­лах (см., на­при­мер, раз­дел «Тео­рия» на нашем сайте), без до­пол­ни­тель­ных по­яс­не­ний.

Имеем им­пли­ка­цию Z17ZA → Z28Z45 или Z(17 or А) → Z(28 or 45). По­сколь­ку 2810  =  111002, 4510  =  1011012, для по­би­то­вой дизъ­юнк­ции имеем: 28or45  =  111101. Тогда Z(17 or А) = Z61.

Им­пли­ка­ция при­ни­ма­ет вид Z(17 or A) → Z61. Еди­нич­ные биты дво­ич­ной за­пи­си числа 61, долж­ны яв­лять­ся еди­нич­ны­ми би­та­ми левой части. По­это­му в по­би­то­вой дизъ­юнк­ции 17orA еди­ни­цы долж­ны сто­ять на ну­ле­вой, вто­рой, тре­тьей, чет­вер­той и пятой по­зи­ци­ях (как обыч­но, счи­тая спра­ва на­ле­во, на­чи­ная с нуля). За­пи­шем числа 17, А и 61 в дво­ич­ной си­сте­ме счис­ле­ния, и вы­яс­ним, что наи­мень­шее число, да­ю­щее при по­раз­ряд­ной дизъ­юнк­ции еди­ни­цы на ука­зан­ных по­зи­ци­ях:

 

17: 010001

 A:  1?110?

61: 111101

 

В за­пи­си наи­мень­ше­го числа, да­ю­ще­го при по­раз­ряд­ной дизъ­юнк­ции с чис­лом 17 еди­ни­цы в не­об­хо­ди­мых раз­ря­дах, на месте зна­ков ? долж­ны сто­ять нули. Тем самым, ис­ко­мым чис­лом яв­ля­ет­ся А  =  1011002  =  4410.

 

При­ведём дру­гое ре­ше­ние.

Решим за­да­ние с по­мо­щью языка про­грам­ми­ро­ва­ния PascalABC ме­то­дом пе­ре­бо­ра:

var

A, x: integer;

B: boolean;

begin

for A := 0 to 63 do begin

B := True;

for x := 0 to 63 do

if not (((x and 28) = 0) and ((x and 45) = 0) or ((x and 17) <> 0) or ((x and A) <> 0)) then

B := False;

if B then begin

writeln(A);

break;

end;

end;

end.

 

При­ве­дем ана­ло­гич­ную про­грам­му на языке Python.

for A in range(64):

B = True

for x in range(64):

if ((x&28==0) and (x&45==0) or (x&17!=0) or (x&A!=0))==0:

B=False

if B:

print(A)

break

За­ме­тим, что можно не пе­ре­би­рать числа, боль­шие 63, по­сколь­ку для за­пи­си чисел 28, 45 и 17 хва­тит шести раз­ря­дов. Про­грам­ма вы­ве­дет ответ 44.

 

Ответ: 44.