Python

С клавиатуры вводится число n. Вычислить сумму S=1/1+1/2+1/3+...+1/n.

Пройдите циклом по генератору от 1 до n.
n = int(input())
s = sum(1/(x+1) for x in range(n))
----------
или более традиционно:
n = int(input())
s = 0
for i in range(n):
__s += 1/(i+1)
------
s - ваша искомая сумма.
или в одну строчку:
print(sum(1/(x+1) for x in range(int(input()))))
AM
Anton Matusevich
984
Лучший ответ
Вот так будет точно, но несколько замедленно:
import decimal, math
a, b, n = 0, 1, int(input('n: '))
for i in range(1, n + 1): a = a * i + b; b *= i
c = math.gcd(a, b); a //= c; b //= c
print(decimal.Decimal(a) / b)
Как видно, этим же способом вычисляется не только приближённое, которое выводится на экран, но и абсолютно точное значение суммы Σ(k=1;n)¹/k в виде несократимой дроби a/b.
Гораздо быстрее сумма будет вычисляться для вещественных чисел типа float:
n, s = int(input('n: ')), 0
while n > 0: s += 1/n; n -= 1
print(s)
Только начинать с самых маленьких слагаемых и идти от 1/n до 1, а не наоборот -так точнее! Ну а уж такой абсурд писать как вон это
sum((1/(x+1) for x in range...)) -это вообще полное извращение!
А самое быстрое и с практически любой точностью вычисление этой суммы можно сделать при помощи асимптотики, которая на скрине внизу. Если надо -напишу, а просто так не буду... ❃ ❃ ❃ ❃
Aidos Tanashev
Aidos Tanashev
66 572
там какай то формула есть, но мне лень считать

Похожие вопросы