• Дано вещественное число а . Найти такое наименьшее m, при котором:
    1+ 1/2+1/3+...+ 1/m>a

Ответы 6

  • Если m превышает хотя бы несколько сотен, то проще это все не считать, а воспользоваться приблизительным значением суммы гармонического ряда, которое дал Л.Эйлер. Она равна ln(m)+C, где С примерно рано 0.577216 (постоянная Эйлера-Маскерони). Потому что для a=10 уже имеем m=12367
  • Дело в том, что гармонический ряд - расходящийся и получить для очень больших m точное решение Вашей задачи за разумное вычислительное время не получится, можно только дать оценку, а затем её уточнять.
    • Автор:

      kaelmckay
    • 6 лет назад
    • 0
  • Что до Паскаля - скачайте этот с официального сайта.
  • Но то, о чем я написал выше - это далеко за рамками школы.
    • Автор:

      skylar6
    • 6 лет назад
    • 0
  • Понял Вас. Большое спасибо за пояснение
  • // 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Указанный ряд - это известный в математике расходящийся гармонический ряд. Его приближенное значение суммы можно определить по формуле Эйлера:\displaystyle S(m)=\sum_{i=1}^m \frac{1}{i} \approx \ln(m)+C, \quad C\approx 0.577\ 215\ 664\ 902Нам требуется определить m, для которого S(m)>a, тогда\displayvalue \ln(m)+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
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years