// PascalABC.NET 3.0, сборка 1160 от 05.02.2016function SHarm(m:integer):real:=Range(1,m).Select(x->1/x).Sum;begin var a:=ReadReal('a='); var m:=1; while SHarm(m)<=a do Inc(m); Writeln('m=',m)end.
Тестовое решение:a= 5m=83Указанный ряд - это известный в математике расходящийся
гармонический ряд. Его приближенное значение суммы можно определить по формуле Эйлера:
=\sum_{i=1}^m \frac{1}{i} \approx \ln(m)+C, \quad C\approx 0.577\ 215\ 664\ 902)
Нам требуется определить m, для которого S(m)>a, тогда
+C\ \textgreater \ a; \ ln(m)\ \textgreater \ a-C \to m\ \textgreater \ e^{a-C})
Будем искать m, отбрасывая дробную часть полученного результата, а потом делать уточнение путем непосредственного вычисления сумм.// PascalABC.NET 3.0, сборка 1160 от 05.02.2016const C=0.577215664902; // Постоянная Эйлера-Маскерониfunction SHarm(m:integer):real:=Range(1,m).Select(x->1/x).Sum;begin var a:=ReadReal('a='); var m:=1; if a<=3 then begin while SHarm(m)<=a do Inc(m); Writeln('m=',m) end else begin var s:real:=Int(exp(a-C)); if a<10 then begin m:=Trunc(s); while SHarm(m)<=a do Inc(m); Writeln('m=',m) end else Writeln('m=',s) endend.В этом случае можно проводить оценочный расчет для больших значений а:a= 200m=4.05709150011779E+86