Первое уравнение системы – это несколько условий, соединённых конъюнкциями. Чтобы такая последовательность условий была истинной, каждое условие должно быть истинным. Заметим, что если какой-то икс оказался равен 1, то все последующие иксы тоже должны быть равны нулю, так как 1 -> 0 = 0.
Остальные уравнения имеют одинаковый вид (a ∨ b ∨ ~c) ∧ (a ∨ ~b ∨ c) ∧ (~a ∨ b ∨ c) = 1. Вновь каждая скобка должна быть истинной. Прикинем, когда так будет.
Пусть a = 1. При этом первые две скобки автоматически истинны, а третья превращается в b ∨ c, что будет истинно, если хотя бы одна из переменных b, c истинна. В этом случае есть 3 комбинации (b, c), при которых уравнение выполняется (все, кроме 0, 0).
Если a = 0, то истинна третья скобка, первые две превращаются в (b ∨ ~c) ∧ (~b ∨ c). В таком выражении можно разглядеть (c -> b) ∧ (b -> c), т.е. эквиваленцию b ↔ c. Она верна, только если операнды одинаковы, тогда есть две комбинации (b, c), при которых уравнение выполняется: (0, 0) и (1, 1).
Собираем вместе: решение первого уравнения – первые k иксов равны 0, оставшиеся 7 - k иксов равны 1. Все оставшиеся уравнения зависимы только через иксы, если соответствующий икс равен 0, то такое уравнение имеет 2 решения, иначе 3 решения. По правилу произведения система при фиксированном k имеет 2^k * 3^(7 - k) = 3^7 * (2/3)^k решений.
Чтобы найти общее количество решений, нужно просуммировать при k от 0 до 7. В этом сумма геометрической прогрессии:
3^7 * ((2/3)^0 + (2/3)^1 + ... + (2/3)^7) = 3^7 * (1 - (2/3)^8)/(1 - 2/3) = 3^8 - 2^8 = 6305.
function nmbdec(var n,osn: integer): integer;
var nmb,l,s,k: integer;
begin
nmb:=0; s:=0;
k:=n; l:=1;
while k>0 do
begin
s:=k mod 10;
k:=k div 10;
nmb:=nmb+l*s;
l:=l*osn;
end;
Result:=nmb;
end;
{ конец функции}
begin
write('число: ');
readln(n);
write('квадрат какого числа: ');
readln(m);
osn:=10;
while osn>=2 do
begin
osn:=osn-1;
if nmbdec(n,osn)=sqr(nmbdec(m,osn)) then
begin
writeln('основание системы = ',osn);
break;
end;
end;
end.