Преобразуем (X & A ≠ 0) → ((X & 12 = 0) → (X & 49 ≠ 0)), избавившись от импликации. Для этого используем замену a→b = ¬a ∨ b
Также учтем, что ¬(p=0) = p≠0
Получаем (X & A = 0) ∨((X & 12 ≠ 0) ∨ (X & 49 ≠ 0))
Можно раскрыть скобки (X & A = 0) ∨ (X & 12 ≠ 0) ∨ (X & 49 ≠ 0)
49₁₀ = 110001₂, 12₁₀ = 001100₂, тогда
(X & A = 0) ∨ (X & 001100 ≠ 0) ∨ (X & 110001 ≠ 0)
Чтобы результат поразрядной конъюнкции был ненулевым, нужно чтобы в обоих операндах совпадали единичные биты хотя бы в одном разряде.
В нашем случае есть три члена, связанные по "ИЛИ" и задача - определить, при каком А выражение всегда будет истинным, т.е. даст хотя бы один единичный бит. Понятно, что значение А влияет только на тот случай, когда нули дали и (X & 001100 ≠ 0), и (X & 110001 ≠ 0).
Когда же такое возможно?
X & 001100 = 0, если Х имеет вид ??00??, где ? - произвольное состояние бита.
X & 110001 = 0, если Х имеет вид 00???0.
Объединяя эти два случаю получаем, при Х=0000?0 выражение
(X & 001100 ≠ 0) ∨ (X & 110001 ≠ 0) даст нули во всех битах.
Тогда (X & A = 0) должно дать хотя бы один единичный бит.
Получаем 0000?0 & А = 0, следовательно, А может иметь вид ????0?.
Тогда максимальное значение А равно 111101₂ = 61₁₀
<span>var a:array [1..10] of integer;
i,s:integer;
begin
for i:=1 to 10 do begin
a[i]:=random(50);
s:=s+a[i];
write(a[i],' ');
end;
writeln;
writeln ('summa=',s);
readln;
end.</span>
Последовательность.
Блин, это просто, он это будет делать по цепочке, как и перечислила его мать.
1) 8
2) 7 выведет 1
3)
11 строка, поменять на k := k + 1;
14 строка заменить на if n = 1 then
Рабочий код
var
n, k: integer;
begin
read(n);
k := 0;
while n mod 7 = 0 do
begin
k := k + 1;
n := n div 7;
end;
if n = 1 then
writeln(k)
else
writeln('He существует')
end.
Правильное решение данной задачи
const
divider = 7;
var
n: integer;
k: real;
begin
read(n);
k := ln(n) / ln(divider);
if round(k) = k then
writeln(round(k))
else
writeln('He существует');
end.