Лучшие помощники
4 мая 2023 04:25
278

Помогите пожалуйста решить задачу на питоне с объяснением!! Написать программу вычисления суммы 1+1/2+1/3....+1/n для заданного числа n. Результат представить в виде несократимой дроби p/q (p, q - натуральные). Использовать подпрограммы алгоритма Евклида для определения НОД и сложения двух простых дробей.

1 ответ
Посмотреть ответы
Конечно, я помогу!

Для начала, давайте разобьем задачу на подзадачи. Нам нужно:

1. Вычислить сумму 1+1/2+1/3....+1/n.
2. Представить результат в виде несократимой дроби p/q.
3. Использовать подпрограммы алгоритма Евклида для определения НОД и сложения двух простых дробей.

Для решения первой подзадачи, мы можем использовать цикл for для перебора от 1 до n и суммирования дробей. Вот код:

```
n = int(input("Введите n: "))
sum = 0
for i in range(1, n+1):
sum += 1/i
print("Сумма равна", sum)
```

Для решения второй подзадачи, мы можем использовать алгоритм Евклида для нахождения НОД числителя и знаменателя дроби. Для этого мы создадим функцию gcd(), которая будет возвращать НОД двух чисел. Вот код:

```
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
```

Теперь мы можем использовать эту функцию для нахождения НОД числителя и знаменателя дроби. Вот код:

```
p = int(sum * 10**6)
q = 10**6
d = gcd(p, q)
p //= d
q //= d
print("Сумма равна", p, "/", q)
```

Мы умножаем числитель на 10^6, чтобы избавиться от дробной части. Затем мы находим НОД числителя и знаменателя и делим оба числа на этот НОД, чтобы получить несократимую дробь.

Для решения третьей подзадачи, мы можем создать функцию для сложения двух простых дробей. Вот код:

```
def add_frac(p1, q1, p2, q2):
p = p1 * q2 + p2 * q1
q = q1 * q2
d = gcd(p, q)
p //= d
q //= d
return p, q
```

Эта функция принимает на вход числитель и знаменатель двух дробей и возвращает их сумму в виде несократимой дроби. Мы сначала находим общий знаменатель, затем складываем числители и делим на НОД, чтобы получить несократимую дробь.

Теперь мы можем использовать эту функцию для вычисления суммы дробей в цикле. Вот полный код программы:

```
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)

def add_frac(p1, q1, p2, q2):
p = p1 * q2 + p2 * q1
q = q1 * q2
d = gcd(p, q)
p //= d
q //= d
return p, q

n = int(input("Введите n: "))
sum_p = 0
sum_q = 1
for i in range(1, n+1):
p, q = 1, i
sum_p, sum_q = add_frac(sum_p, sum_q, p, q)

d = gcd(sum_p, sum_q)
sum_p //= d
sum_q //= d
print("Сумма равна", sum_p, "/", sum_q)
```

Мы сначала инициализируем переменные sum_p и sum_q нулем и единицей соответственно, чтобы потом использовать их для сложения дробей в цикле. Затем мы перебираем числа от 1 до n, вычисляем дробь 1/i и складываем ее с текущей суммой, используя функцию add_frac(). В конце мы находим НОД числителя и знаменателя суммы и делим на него, чтобы получить несократимую дробь.

Надеюсь, это помогло! Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.
1
·
Хороший ответ
4 мая 2023 04:27
Остались вопросы?
Найти нужный