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

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

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

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

x&51 = 0 ∨ (x&41 = 0 → x&А = 0)

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

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

Ре­ше­ние.

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

Х + (Y → Z) = Х + (¬Y + Z) = Х + Z + ¬Y = Y → (X + Z) = (Y → X) + (Y → Z).

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

За­ме­тим, что пер­вое сла­га­е­мое ло­ги­че­ской суммы яв­ля­ет­ся им­пли­ка­ци­ей Z41 → Z51, ко­то­рая не яв­ля­ет­ся ис­тин­ной для всех х (см. ниже). Тогда не­об­хо­ди­мо и до­ста­точ­но, чтобы вто­рое сла­га­е­мое ло­ги­че­ской суммы было тож­де­ствен­но ис­тин­ным.

Дей­стви­тель­но, на­при­мер, для х  =  2 по­раз­ряд­ная конъ­юнк­ция с чис­лом 41 дает 0, а с чис­лом 51 дает 2. По­это­му им­пли­ка­ция (2&41) → (2&51) при­ни­ма­ет вид 1 → 0  — ложь.

 

 2:      000010

41:     101001

2&41: 000000, то есть 2&41 = 0. Вы­ска­зы­ва­ние 2&41 = 0 ис­тин­но.

 

 2:      000010

51:     110011

2&51: 000010 = 2, то есть 2&51 = 2. Вы­ска­зы­ва­ние 2&51 = 0 ложно.

 

Итак, им­пли­ка­ция Z41 → ZA долж­на быть тож­де­ствен­но ис­тин­ной. За­пи­шем число 41 в дво­ич­ной си­сте­ме счис­ле­ния: 4110  =  1010012. Еди­нич­ные биты, сто­я­щие в пра­вой части, долж­ны яв­лять­ся еди­нич­ны­ми би­та­ми левой. По­это­му в пра­вой части еди­нич­ны­ми би­та­ми не­за­ви­си­мо друг от друга могут быть (а могут не быть) толь­ко ну­ле­вой, тре­тий и пятый биты (как обыч­но, счи­тая спра­ва на­ле­во, на­чи­ная с нуля).

Тем самым, наи­боль­шее А = 1010012  =  4110.

 

При­ме­ча­ние.

Ответ 45 не под­хо­дит. Пусть A = 45, а x = 2210 = 101102, тогда:

 

51:       1100112

22:       0101102

51&22: 0100102, т. е. вы­ска­зы­ва­ние 22&51 = 0 ложно.

 

41:       1010012

22:       0101102

41&22: 0000002, т. е. вы­ска­зы­ва­ние 22&41 = 0 ис­тин­но.

 

45:       1011012

22:       0101102

45&22: 0001002, т. е. вы­ска­зы­ва­ние 22&45 = 0 ложно.

 

Сле­до­ва­тель­но, при x = 22 и A = 45 ло­ги­че­ское вы­ра­же­ние x&51 = 0 ∨ (x&41 = 0 → x&А = 0) ложно.

 

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

Вы­ра­же­ние x&51 = 0 ∨ (x&41 = 0 → x&А = 0) долж­но быть ис­тин­ным для лю­бо­го х. Возь­мем такое х, в ко­то­ром уста­нов­ле­ны все биты, кроме тех, ко­то­рые уста­нов­ле­ны в числе 41, на­при­мер, для од­но­бай­то­во­го пред­став­ле­ния х  =  110101102.

Вы­ра­же­ние x&51  =  0 будет ложно, по­сколь­ку и в числе х, и в числе 51 уста­нов­лен пер­вый бит (биты счи­та­ем спра­ва на­ле­во, на­чи­ная с нуля).

Сле­до­ва­тель­но, ис­тин­ной долж­на быть им­пли­ка­ция во вто­рой скоб­ке. Но левая часть им­пли­ка­ции x&41  =  0 ис­тин­на, по­сколь­ку ни один из битов, уста­нов­лен­ных в числе 41, в числе х не уста­нов­лен.

Тогда ис­тин­ной долж­на быть и пра­вая часть им­пли­ка­ции x&А  =  0. Сле­до­ва­тель­но, в числе А могут быть уста­нов­ле­ны толь­ко те биты, ко­то­рые не уста­нов­ле­ны в числе х, то есть ну­ле­вой, тре­тий и пятый биты. Таким об­ра­зом, наи­боль­шее А  =  1010012  =  4110.

При таком А левая и пра­вая части им­пли­ка­ции оди­на­ко­вы, сле­до­ва­тель­но, им­пли­ка­ция в пра­вой скоб­ке ис­тин­на, а зна­чит, ис­тин­но и все вы­ра­же­ние.

 

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

Решим за­да­ние с по­мо­щью языка про­грам­ми­ро­ва­ния 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 51) = 0) or ((x and 41) <> 0) or ((x and (63-A)) = 0)) then

B := False;

if B then begin

writeln((63-A));

break;

end;

end;

end.

 

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

for A in range(64):

B = True

for x in range(64):

if ((x&51==0) or (x&41!=0) or (x&(63-A)==0))==0:

B=False

if B:

print(63-A)

break

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

 

Ответ: 41.

Источник: РЕШУ ЕГЭ