#1
begin
var N := ReadInteger();
var sum:real := 1;
for var i := 1 to N do sum *= 1 / i;
sum.println;
end.
#2
begin
var N := ReadInteger();
var sum:real := 1;
var divisor := 1;
while divisor <= N do begin
sum *= 1/divisor;
divisor += 1;
end;
sum.Println;
end.
#3
begin
var N := ReadInteger();
var sum:real := 1;
var divisor := 1;
repeat begin
sum *= 1/divisor;
divisor += 1;
end;
until divisor > N;
sum.Println;
end.
А вообще:
begin
SeqGen(ReadInteger(), p -> 1/p, 1).product.Println;
end.
1, 2, 3, 4
Объяснение:
Введем обозначения:
a = X > 0, b = X > 4
Тогда выражение будет иметь вид (a + b) → b и нужно найти условия, когда оно ложно. Вместо этого, мы будем искать, когда отрицание этого условия истинно, т.е. истинность ¬( (a + b) → b)
Для начала избавимся от импликации
¬( ¬(a + b) + b)
А теперь примерим к внешнему отрицанию закон де-Моргана
(a + b) · ¬b
Раскрываем скобки
a · ¬b + b · ¬b
a · ¬b + 0
a · ¬b
Делаем обратную замену
( X > 0) · ¬(X > 4)
( X > 0) · (X ≤ 4)
Переведем это на более понятный язык:
X > 0 И X ≤ 4, или
0 < X ≤ 4
Из целых чисел сюда подойдут 1, 2, 3, 4.