Для заданной десятичной периодической дроби найти два ближайших целых числа, деление которых эту десятичную периодическую дробь даёт.
например:
х = 0.(1234567890)
Python
Задача на поиск целых частного и делителя для заданной периодической дроби. Простенькая задача для начинающих программи
любая периодическая дробь после запятой представляется в виде рациональной,
где в числителе то что в периоде, а в знаменателе девятки в том же количестве, что и число цифирь в периоде
потом найди НОД с помощью gcd() и раздели на него и числитель и знаменатель
в итоге получишь шо ищешь
где в числителе то что в периоде, а в знаменателе девятки в том же количестве, что и число цифирь в периоде
потом найди НОД с помощью gcd() и раздели на него и числитель и знаменатель
в итоге получишь шо ищешь
Галымжан Калмагамбетов
Огромное спасибо! Гениально!
Для решения этой задачи, можно воспользоваться следующим алгоритмом:
1. Преобразовать периодическую дробь в виде строки, удалив скобки и знак периода. Например, для числа x = 0.(1234567890), строка будет выглядеть как "1234567890".
2. Определить максимальную длину делителя, которая будет равна половине длины строки. Например, если длина строки равна 10, то максимальная длина делителя будет 5.
3. Проитерироваться по всем возможным делителям от 1 до максимальной длины делителя. Для каждого делителя, проверить, является ли строка делителем периодической дроби.
4. Если делитель является делителем периодической дроби, вычислить целое частное, разделив строку на делитель.
5. Найти два ближайших целых числа к полученному целому частному. Можно использовать функцию `math.floor` для округления вниз и `math.ceil` для округления вверх.
Вот пример реализации данного алгоритма на языке Python:
```python
import math
def find_closest_integers(x):
# Преобразование периодической дроби в строку
x_str = str(x)[2:-1]
# Максимальная длина делителя
max_divisor_length = len(x_str) // 2
closest_integers = []
# Итерация по всем возможным делителям
for divisor_length in range(1, max_divisor_length + 1):
divisor = int(x_str[:divisor_length])
# Проверка, является ли делитель делителем периодической дроби
if int(x_str) % divisor == 0:
quotient = int(x_str) // divisor
# Нахождение двух ближайших целых чисел
closest_integers.append(math.floor(quotient))
closest_integers.append(math.ceil(quotient))
break # Прерываем цикл, если найдены два ближайших числа
return closest_integers
x = 0.1234567890
result = find_closest_integers(x)
print(result)
```
Результатом выполнения данного кода будет список с двумя ближайшими целыми числами, деление которых даст периодическую дробь 0.1234567890.
1. Преобразовать периодическую дробь в виде строки, удалив скобки и знак периода. Например, для числа x = 0.(1234567890), строка будет выглядеть как "1234567890".
2. Определить максимальную длину делителя, которая будет равна половине длины строки. Например, если длина строки равна 10, то максимальная длина делителя будет 5.
3. Проитерироваться по всем возможным делителям от 1 до максимальной длины делителя. Для каждого делителя, проверить, является ли строка делителем периодической дроби.
4. Если делитель является делителем периодической дроби, вычислить целое частное, разделив строку на делитель.
5. Найти два ближайших целых числа к полученному целому частному. Можно использовать функцию `math.floor` для округления вниз и `math.ceil` для округления вверх.
Вот пример реализации данного алгоритма на языке Python:
```python
import math
def find_closest_integers(x):
# Преобразование периодической дроби в строку
x_str = str(x)[2:-1]
# Максимальная длина делителя
max_divisor_length = len(x_str) // 2
closest_integers = []
# Итерация по всем возможным делителям
for divisor_length in range(1, max_divisor_length + 1):
divisor = int(x_str[:divisor_length])
# Проверка, является ли делитель делителем периодической дроби
if int(x_str) % divisor == 0:
quotient = int(x_str) // divisor
# Нахождение двух ближайших целых чисел
closest_integers.append(math.floor(quotient))
closest_integers.append(math.ceil(quotient))
break # Прерываем цикл, если найдены два ближайших числа
return closest_integers
x = 0.1234567890
result = find_closest_integers(x)
print(result)
```
Результатом выполнения данного кода будет список с двумя ближайшими целыми числами, деление которых даст периодическую дробь 0.1234567890.
Галымжан Калмагамбетов
Весьма благодарен!
def find_closest_integers(x):
# вычисляем период
decimals = str(x)[2:]
period_start = decimals.find('(')
period_end = decimals.find(')')
period = decimals[period_start+1:period_end]
# вычисляем целую часть
integer_part = int(x)
# вычисляем числитель и знаменатель дробной части
numerator = int(decimals[:period_start] + period)
denominator = 10**len(period) - 1
# вычисляем целое число d
d = int(decimals[:period_start])
# вычисляем дробь в форме суммы двух чисел
a = integer_part
b = numerator - a * denominator
c = denominator
x_fraction = a + b / (c - d)
# округляем до ближайших целых чисел
lower = int(x_fraction)
upper = lower + 1
return (lower, upper)
Галымжан Калмагамбетов
Спасибо!
Похожие вопросы
- Как понять логику решения следующей задачи "ДЛЯ НАЧИНАЮЩИХ"?
- Задача по питону для начинающих
- Олимпиада задача про делители и числа
- Как понять логику решения следующей задачи (ещё и "для начинающих" называется)?
- Найти произведение нетривиальных делителей
- Как среди чисел, данных в блокноте, найти, те у которых определенное количество делителей(в Python)
- Помогите, пожалуйста с делителями python
- Питон. Как найти все делители числа?
- Задача в питоне!!!!!! Дано целое число n (n находится в диапазоне от 1 до 99), определяющее возраст человека в годах.
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор