|
1 / 1 / 0
Регистрация: 24.06.2016
Сообщений: 143
|
|
Написать программу, определяющую период дроби26.06.2016, 14:34. Показов 6661. Ответов 49
Метки нет (Все метки)
Любое рациональное число представляется в виде бесконечной десятичной периодической дроби. Написать программу, определяющую период дроби n / m, где n и m – натуральные числа.
0
|
|
| 26.06.2016, 14:34 | |
|
Ответы с готовыми решениями:
49
Определить период дроби
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 16.12.2024, 15:18 | |
|
COKPOWEHEU, ты хоть считал сколько там итераций будет? Очень мало. Я бы не назвал это перебором) Там же 9 добавляется макс до длины макс long long.
18 итераций в худшем случае вроде
0
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
|
| 16.12.2024, 15:55 | |
|
Использовать string для целочисленных вычислений само по себе непрофессионально.
Как и использование полного перебора вместо аналитического решения. У Tertiboer и то лучше.
0
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 16.12.2024, 16:00 | |
|
COKPOWEHEU, как раз строки и используются во всех серьезных библиотеках для работы с большими целыми числами (big int). Именно строки, а не даже векторы и прочее...
Но я и не заявляю, что мой алгоритм претендует стать лучшим в данной теме. Мне просто было интересно реализовать предложенную мной выше идею, что я и сделал.
0
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
|||
| 16.12.2024, 16:33 | |||
|
0
|
|||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 16.12.2024, 16:46 | |
|
0
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
|
| 16.12.2024, 17:38 | |
|
0
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||
| 16.12.2024, 17:43 | ||
|
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||
| 16.12.2024, 18:25 | ||
|
Однако "небуквальное" решение, конечно, интереснее. В частности, да - через вариант с девятками в знаменателе.
0
|
||
|
Windows must die
|
|
| 16.12.2024, 18:32 | |
|
Аналогично можно для чисел, где единицы в знаменателе, начиная с двух: количество цифр в периоде равно количеству единиц в знаменателе, а сам период равен числителю, помноженному на 9. Например, 5/11 = 0.(45), 16/111 = 0.(144), 151/1111 = 0.(1359) и т.д.
(является следствием вышеупомянутого правила о девятках; аналогично следствием будет правило с тройками в знаменателе)
0
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
|||
| 16.12.2024, 21:26 | |||
|
--- Ну ладно, попробую воспроизвести свое доказательство. Пусть мы хотим проверить рациональное число 1/b = 0,(a), где a - натуральное, повторяющаяся часть периода, b - натуральное. Период в системе счисления N равен k цифрам. Тогда 0,(a) * Nk = a,(a). То есть a до запятой и бесконечно повторяется после. a,(a) - 0,(a) = a 0,(a) * Nk - 0,(a) = a 0,(a) * (Nk - 1) = a 1/b * (Nk - 1) = a Nk - 1 = a*b Nk - число в данной системе счисления, состоящее из единицы и k нулей. Соответственно, Nk - 1 - число, состоящее из k "девяток". Если я нигде не ошибся, это доказывает, что любое число 1/b будет делителем числа, состоящего из одних "девяток", причем второй делитель будет периодом, а количество девяток - длиной периода. Полагаю, расширить доказательство до произвольного d/b = x,y(a) будет несложно. Ну там сводим дробь к взаимно простым числам, выносим множитель за скобки, выносим непериодическую часть и т.д. Что приятно, доказательство работает для любой системы счисления, не только 10. Ну, по крайней мере, должно работать... А вот как от него перейти к аналитическому решению, я не знаю.
0
|
|||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||
| 17.12.2024, 00:12 | ||
|
Но здесь есть одно НО. Данный алгоритм работает только, когда повторяющая часть начинается непосредственно после десятичного разделителя. Но вот допустим случай с дробью 7/12. Предложенный мной алгоритм ничего не найдет, ибо тут 0.58(3) - т.е. повторяющаяся часть начинается не сразу после десятичного разделителя. Хотя, я вот смотрю, код Catstail тоже неверно выводит для такой дроби, пишет 58, что неверно. Или вот еще одна дробь 1/24 = 0.041(6). У Catstail выводит 41, что чушь. Мой код тоже не работает. Как и сказал, наши алгоритмы не работают для таких дробей. Так что, мой код никак не претендует стать ответом в данной теме. Тем более, я только что увидел, что написал на С++, а то я бы написал на С. Вот у меня на телефоне есть калькуляторы, которые умеют подчеркивать период. Т.е. вместо повторяющихся цифр, они выводят только период. Но мне кажется, что эти калькуляторы не используют никаких аналитических алгоритмов по выявлению периода. Тут тупо срабатывает механизм поиска повторяющегося куска.
1
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||
| 17.12.2024, 02:03 | ||
|
0
|
||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 17.12.2024, 09:15 | |
|
Catstail, я и не переживаю, пусть ТС переживает. У меня других проблем в жизни хватает, не до дробей мне
1
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
||
| 17.12.2024, 12:00 | ||
|
0
|
||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 17.12.2024, 12:11 | |
|
COKPOWEHEU, не ну я проверял не на двух числах. Но я понял вас с первого раза. Это как бинарная гипотеза Гольдбаха. Все понимают, что работает, а работоспособность была проверена аж до 4×10^18, тем не менее, пока не доказано, 100% уверенности нет.
Но сейчас я занят, чтобы заниматься доказательством или его поиском в инете.
0
|
|
|
4146 / 2724 / 433
Регистрация: 09.09.2017
Сообщений: 12,069
|
||
| 17.12.2024, 13:44 | ||
|
0
|
||
|
Супер-модератор
|
||||||
| 17.12.2024, 17:55 | ||||||
|
Выполняю обещание:
0.041(6) 0.58(3) 0.02 0.(3)
1
|
||||||
|
2469 / 1615 / 741
Регистрация: 17.03.2022
Сообщений: 5,264
|
|
| 17.12.2024, 18:26 | |
|
Вообще говоря, есть стандартный алгоритм для определения периода дроби a/b (при a<b). Выглядит он примерно так:
1) Делим a на b с остатком и фиксируем остаток; 2) Делим 10*a на b и фиксируем остаток; ... n) Делим 10^n*a на b и фиксируем остаток; ... Разность номеров первых двух одинаковых остатков - период дроби. Номер k, на котором повторившийся остаток встретился в первый раз - номер цифры после запятой, с которой дробь стала периодической. Ну и все, собственно. Реализация на C, наверное, всем присутствующим очевидна.
2
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
|
||||||||
| 17.12.2024, 21:34 | ||||||||
1
|
||||||||
| 17.12.2024, 21:34 | |
|
Составьте программу, определяющую период десятичной дроби Составить программу, которая для натуральных чисел m и n вычисляет период десятичной дроби m/n
Период у дроби Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|