Правила форума
В этом разделе нельзя создавать новые темы.
Если Вы хотите задать новый вопрос, то не дописывайте
его в существующую тему, а создайте новую в корневом разделе “Помогите решить/разобраться (М)”.
Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.
Не ищите на этом форуме халяву
, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения
и указать конкретные затруднения.
Обязательно просмотрите тему
Правила данного раздела, иначе Ваша тема может быть удалена
или перемещена в Карантин, а Вы так и не узнаете, почему.
|
Найти число по количеству делителей и их сумме 15.04.2011, 23:51 |
24/03/09 |
Всем привет. Нам известно, что у числа делителей. (Включая и само число ). Чему равно это , если сумма делителей равно ? P.S. Нашел в интернете похожую задачку. Условие такое же, только сумма равна . В таком случае подходит число 75, ведь: Благодарю за помощь!
|
|
|
ИСН |
Re: Делители 16.04.2011, 00:16 |
||
18/05/06 |
Такое число (которое даёт 126) тоже есть, а находится оно длительной вознёй с разложением на простые.
|
||
|
|||
svv |
Re: Делители 16.04.2011, 00:36 |
||
23/07/08 |
Нашел простой способ. Пусть разложение на простые множители имеет вид . Тогда имеет делителя: , , , . Мало что-то у нас делителей, по условию должно быть . Прибавим ещё один простой множитель. Теперь . Тогда имеет аж делителей: , , , , , , , . Перебор. Где же выход? А он есть.
|
||
|
|||
bot |
Re: Делители 16.04.2011, 05:55 |
||
21/12/05 |
Число и сумма делителей — Сб апр 16, 2011 10:03:02 — Упс, 126 ведь на 7 делится – ИСН прав, решение есть.
|
||
|
|||
VAL |
Re: Делители 16.04.2011, 08:05 |
||
27/06/08 |
Такое число (которое даёт 126) тоже есть, а находится оно длительной вознёй с разложением на простые. Зачем, зря пугаете? 30 секунд (этого вполне достаточно для полного обоснованного решения задачи) – это длительная возня? PS: Разумеется, подход тот же, что у bot ‘а.
|
||
|
|||
Модераторы: Модераторы Математики, Супермодераторы
Здравствуйте, дорогие читатели! Как посчитать, сколько делителей у какого-нибудь числа? Если это число маленькое, то никаких сложностей не возникает. Например, для числа 10, мы легко можем найти все делители и посчитать их количество простым перебором. А вот как узнать, на какое количество различных чисел делится, например, число 720? Можно, конечно, опять же перебрать все делители, но это будет довольно трудоемко. При чем, 720 – еще и довольно маленькое число.
Сегодня, я Вам расскажу, как находить количество делителей любого натурального числа, зная всего лишь одну простую формулу.
На самом деле, наша сегодняшняя формула будет даже проще, чем те, которые изображены на картинке выше)
Вы находитесь на канале Trifler, где я разбираю интересные математические задачи, а также рассуждаю на некоторые околоматематические темы. Если Вы искренне увлечены математикой, но еще не подписаны на этот канал, то самое время это исправить! Подписаться
Чудо-формула
Ну что ж, пора переходить от разговоров к делу.
Мы знаем, что любое натуральное число можно представить в виде произведения простых чисел, которые являются его делителями. Так как один и тот же простой делитель может встречаться несколько раз, то любое натуральное числа можно записать так:
Если не совсем понятно, о чем идет речь, то потом посмотрите пример ниже. На самом деле, все очень просто.
Так вот, после того, как мы найдем такое представление числа n, количество его делителей можно будет посчитать по формуле:
Посмотрим, как все это считается на примере
Пример
Раскладываем это число на простые множители, чтобы получить нужное представление:
Теперь, запишем число 720 в каноническом виде:
Ну и все, остается только применить чудо-формулу:
Вот и все, получили, что у числа 720 имеется 30 различных натуральных делителей. Стоит сделать замечание:
По этой формуле мы считаем количество делителей вместе с единицей и самим числом.
Если Вам понравилась статья, то обязательно ставьте лайки и комментируйте ее. Это поспособствует тому, чтобы ее увидело много людей!
Читайте также ТОП-3 статьи, выпущенные в этом месяце на моем канале:
- Quincy: робот, который обучит Ваших детей математике, английскому и рисованию
- Почему вторая степень это квадрат, а третья – куб
- Необычное тригонометрическое уравнение
gray621 36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
||||
1 |
||||
Найти число по количеству делителей17.01.2021, 19:52. Показов 9251. Ответов 14 Метки python 3, питон (Все метки)
Формат ввода Формат вывода Пример 1 Вот код, чтобы найти кол-во делителей числа, а как наоборот?
0 |
unfindable_404 690 / 473 / 204 Регистрация: 22.03.2020 Сообщений: 1,052 |
||||
17.01.2021, 20:32 |
2 |
|||
На основе вашего кода:
1 |
7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
|
17.01.2021, 20:42 |
3 |
gray621, подсказка – количество делителей :
1 |
gray621 36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
||||
17.01.2021, 20:52 [ТС] |
4 |
|||
divs = int(input()) Спасибо, у меня не получалось придумать ещё n, а так всё такое же. Добавлено через 5 минут
Код не работает на 18 тесте, превышен лимит времени, можно как-то ускорить цикл?
0 |
7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
|
17.01.2021, 21:06 |
5 |
gray621, ограничения на “n” есть ?
0 |
36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
|
17.01.2021, 21:23 [ТС] |
6 |
ограничения на “n” есть ? Нет, но есть ограничение на время 1 секунда, а тест идёт 1064 ms, то есть нужно ускорить цикл немножко. Добавлено через 15 минут
0 |
3478 / 2086 / 559 Регистрация: 02.09.2015 Сообщений: 5,329 |
|
17.01.2021, 21:35 |
7 |
Нарыл решение Но оно не удовлетворяет условию:
При решении нельзя использовать функции и методы, а также списки и словари. В т. ч. мемоизация.
0 |
Gdez 7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
||||
17.01.2021, 22:08 |
8 |
|||
Сообщение было отмечено gray621 как решение Решениеgray621, если не ошибся
Добавлено через 7 минут
1 |
Arsegg |
17.01.2021, 22:34
|
Не по теме:
Если интересует, то возможно найду задачу на кодфорс. Полагаю, задача div1. 😀
0 |
gray621 36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
||||
17.01.2021, 22:49 [ТС] |
10 |
|||
divs = int(input()) А почему там n в корень возводится, а не пополам делится? Добавлено через 5 минут
?
0 |
7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
|
17.01.2021, 23:11 |
11 |
Arsegg, Добавлено через 5 минут А почему там n в корень возводится, а не пополам делится? Потому что это не слагаемые, а делители. Допустим для 40 не нужно искать делители больше 6, сразу считать парами – 1 и 40, 2 и 20, 4 и 10, 5 и 8; всего 8 делителей. Добавлено через 5 минут
2 |
36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
|
17.01.2021, 23:25 [ТС] |
12 |
если число не квадрат другого числа, то количество делителей четное То есть у квадратов чисел корни натуральные числа?
0 |
7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
|
17.01.2021, 23:41 |
13 |
gray621, нет Добавлено через 2 минуты
0 |
gray621 36 / 51 / 11 Регистрация: 14.01.2021 Сообщений: 406 |
||||||||
18.01.2021, 00:14 [ТС] |
14 |
|||||||
Когда найдешь код, который пройдет все тесты Твой код прошёл Добавлено через 15 секунд
Когда найдешь код, который пройдет все тесты Твой код прошёл Добавлено через 10 секунд
Когда найдешь код, который пройдет все тесты Твой код прошёл Добавлено через 22 минуты
И ещё почему в range + 1?
0 |
Gdez 7250 / 4039 / 1779 Регистрация: 27.03.2020 Сообщений: 6,865 |
||||
18.01.2021, 04:38 |
15 |
|||
gray621, Зачем проверка для чётного кол-во делителей Потому что для четных диапазон :
Для нечетных изначально можно не включать значение корня (для 36 число 6 уже входит -> count_of_dividers = 1)
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
18.01.2021, 04:38 |
Помогаю со студенческими работами здесь Дано число P, нужно найти число от 1 до Р, с наибольшим количеством делителей int p; Дано натуральное число N. Найти число от 1 до N с максимальной суммою делителей Формат входных… Дано натуральное число n. Найти число от 1 до n, имеющий как можно большее сумму делителей . Найти число всех натуральных делителей числа , которые не превосходят это число и взаимно простых с ним: а) 720, б) 3179, в) 6615 Перестановка элементов массива по количеству делителей Расставьте данный массив натуральных чисел по количеству их делителей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 15 |
В данной статье мы поговорим о том, как найти все делители числа. Начнем с доказательства теоремы, с помощью которой можно задать вид всех делителей определенного числа. Далее возьмем примеры нахождения всех нужных делителей и покажем, как именно определить, сколько делителей имеет конкретное число. В последнем пункте подробно рассмотрим примеры задач на нахождение общих делителей нескольких чисел.
Как найти все делители числа
Чтобы понять материал, изложенный в данном пункте, нужно хорошо знать, что вообще из себя представляют кратные числа и делители. Здесь мы поговорим только о поиске делителей натуральных чисел, т.е. целых положительных. Этим можно ограничиться, поскольку свойство делимости гласит, что делители целого отрицательного числа аналогичны делителям целого положительного, которое будет противоположным по отношению к этому числу. Также сразу уточним, что у нуля есть бесконечно большое число делителей, и находить их смысла не имеет, поскольку в итоге все равно получится 0.
Если речь идет о простом числе, то его можно разделить только на единицу и на само себя. Значит, у любого простого числа a есть всего 4 делителя, два из которых больше 0 и два меньше: 1, -1, a, -a. Возьмем простое число 7: у него есть делители 7, -7, 1 и -1, и все. Еще один пример: 367 – тоже простое число, которое можно разделить лишь на 1, -1, 367 и -367.
Сложнее определить все делители составного числа. Сформулируем теорему, которая лежит в основе данного действия.
Допустим, у нас есть выражение, означающее каноническое разложение числа на простые множители, вида a=p1s1·p2s2·…·pnsn. Тогда натуральными делителями числа a будут следующие числа: d=p1t2·p2t2·…·pntn, где t1=0, 1, …, s1, t2=0, 1, …, s2, …, tn=0, 1, …, sn.
Перейдем к доказательству этой теоремы. Зная основное определение делимости, мы можем утверждать, что a можно разделить на d, если есть такое число q, что делает верным равенство a=d·q, т.е. q=p1(s1−t1)·p2(s2-t2)·…·pn(sn-tn).
Любое число, делящее a, будет иметь именно такой вид, поскольку, согласно свойствам делимости, других простых множителей, кроме p1, p2, …, pn, оно иметь не может, а их показатели в данном случае не превысят s1, s2, …, sn.
Учитывая доказательство этой теоремы, мы можем сформировать схему нахождения всех положительных делителей данного числа.
Для этого нужно выполнить следующие действия:
- Выполнить каноническое разложение на простые множители и получить выражение вида a=p1s1·p2s2·…·pnsn.
- Найти все значения d=p1t2·p2t2·…·pntn, где числа t1, t2, …, tn будут принимать независимо друг от друга каждое из значений t1=0, 1, …, s1, t2=0, 1, …, s2, …, tn=0, 1, …, sn.
Самым трудным в таком расчете является именно перебор всех комбинаций указанных значений. Разберем подробно решения нескольких задач, чтобы наглядно показать применение данной схемы на практике.
Условие: найти все делители 8.
Решение
Разложим восьмерку на простые множители и получим 8=2·2·2. Переведем разложение в каноническую форму и получим 8=23. Следовательно, a=8, p1=2, s1=3.
Поскольку все делители восьмерки будут значениями p1t1=2t1, то t1 может принять значения нуля, единицы, двойки, тройки. 3 будет последним значением, ведь s1=3. Таким образом, если t1=0, то 2t1=20=1, если 1, то 2t1=21=2, если 2, то 2t1=22=4, а если 3, то 2t1=23=8.
Для нахождения делителей удобно все полученные значения оформлять в виде таблицы:
t1 | 2t1 |
0 | 20=1 |
1 | 21=2 |
2 | 22=4 |
3 | 23=8 |
Значит, положительными делителями восьмерки будут числа 1, 2, 4 и 8, а отрицательными −1, −2, −4 и −8.
Ответ: делителями данного числа будут ±1, ±2, ±4, ±8.
Возьмем пример чуть сложнее: в нем при разложении числа получится не один, а два множителя.
Условие: найдите все делители числа 567, являющиеся натуральными числами.
Решение
Начнем с разложения данного числа на простые множители.
56718963217133337
Приведем разложение к каноническому виду и получим 567=34·7. Затем перейдем к вычислению всех натуральных множителей. Для этого будем присваивать t1 и t2 значения 0, 1, 2, 3, 4 и 0, 1, вычисляя при этом значения 3t1·7t2. Результаты будем вносить в таблицу:
t1 | t2 | 3t1·7t2 |
0 | 0 | 30·70=1 |
0 | 1 | 30·71=7 |
1 | 0 | 31·70=3 |
1 | 1 | 31·71=21 |
2 | 0 | 32·70=9 |
2 | 1 | 32·71=63 |
3 | 0 | 33·70=27 |
3 | 1 | 33·71=189 |
4 | 0 | 34·70=81 |
4 | 1 | 34·71=567 |
Ответ: натуральными делителями 567 будут числа 27, 63, 81, 189, 1, 3, 7, 9, 21 и 567.
Продолжим усложнять наши примеры – возьмем четырехзначное число.
Условие: найти все делители 3 900, которые будут больше 0.
Решение
Проводим разложение данного числа на простые множители. В каноническом виде оно будет выглядеть как 3 900=22·3·52·13. Теперь приступаем к нахождению положительных делителей, подставляя в выражение 2t1·3t2·5t3·13t4 значения t1, равные 0, 1 и 2, t2=0,1, t3=0, 1, 2, t4=0, 1. Результаты представляем в табличном виде:
t1 | t2 | t3 | t4 | 2t1·3t2·5t3·13t4 |
0 | 0 | 0 | 0 | 20·30·50·130=1 |
0 | 0 | 0 | 1 | 20·30·50·131=13 |
0 | 0 | 1 | 0 | 20·30·51·130=5 |
0 | 0 | 1 | 1 | 20·30·51·131=65 |
0 | 0 | 2 | 0 | 20·30·52·130=25 |
0 | 0 | 2 | 1 | 20·30·52·131=325 |
0 | 1 | 0 | 0 | 20·31·50·130=3 |
0 | 1 | 0 | 1 | 20·31·50·131=39 |
0 | 1 | 1 | 0 | 20·31·51·130=15 |
0 | 1 | 1 | 1 | 20·31·51·131=195 |
0 | 1 | 2 | 0 | 20·31·52·130=75 |
0 | 1 | 2 | 1 | 20·31·52·131=975 |
t1 | t2 | t3 | t4 | 2t1·3t2·5t3·13t4 |
1 | 0 | 0 | 0 | 21·30·50·130=2 |
1 | 0 | 0 | 1 | 21·30·50·131=26 |
1 | 0 | 1 | 0 | 21·30·51·130=10 |
1 | 0 | 1 | 1 | 21·30·51·131=130 |
1 | 0 | 2 | 0 | 21·30·52·130=50 |
1 | 0 | 2 | 1 | 21·30·52·131=650 |
1 | 1 | 0 | 0 | 21·31·50·130=6 |
1 | 1 | 0 | 1 | 21·31·50·131=78 |
1 | 1 | 1 | 0 | 21·31·51·130=30 |
1 | 1 | 1 | 1 | 21·31·51·131=390 |
1 | 1 | 2 | 0 | 21·31·52·130=150 |
1 | 1 | 2 | 1 | 21·31·52·131=1950 |
t1 | t2 | t3 | t4 | 2t1·3t2·5t3·13t4 |
2 | 0 | 0 | 0 | 22·30·50·130=4 |
2 | 0 | 0 | 1 | 22·30·50·131=52 |
2 | 0 | 1 | 0 | 22·30·51·130=20 |
2 | 0 | 1 | 1 | 22·30·51·131=260 |
2 | 0 | 2 | 0 | 22·30·52·130=100 |
2 | 1 | 0 | 1 | 22·30·52·131=1300 |
2 | 1 | 0 | 0 | 22·31·50·130=12 |
2 | 1 | 0 | 1 | 22·31·50·131=156 |
2 | 1 | 1 | 0 | 22·31·51·130=60 |
2 | 1 | 1 | 1 | 22·31·51·131=780 |
2 | 1 | 2 | 0 | 22·31·52·130=300 |
2 | 1 | 2 | 1 | 22·31·52·131=3900 |
Ответ: делителями числа 3 900 будут:195, 260, 300, 325, 390, 650, 780, 975, 75, 78, 100, 130, 150, 156, 13,15, 20, 25, 26, 30, 39, 50,52, 60, 65, 1, 2, 3, 4, 5, 6, 10, 12, 1 300, 1 950, 3 900
Как определить количество делителей конкретного числа
Чтобы узнать, сколько положительных делителей у конкретного числа a, каноническое разложение которого выглядит как a=p1s1·p2s2·…·pnsn, нужно найти значение выражения (s1+1) ·(s2+1) ·…·(sn+1). О количестве наборов переменных t1, t2, …, tn мы можем судить по величине записанного выражения.
Покажем на примере, как это вычисляется. Определим, сколько будет натуральных делителей у числа 3 900, которое мы использовали в предыдущей задаче. Каноническое разложение мы уже записывали: 3 900=22·3·52·13. Значит, s1=2, s2=1, s3=2, s4=1. Теперь подставим значения s1, s2, s3 и s4 в выражение (s1+1) ·(s2+1) ·(s3+1) ·(s4+1) и вычислим его значение. Имеем (2+1)·(1+1)·(2+1)·(1+1)=3·2·3·2=36. Значит, это число имеет всего 36 делителей, являющихся натуральными числами. Пересчитаем то количество, что у нас получилось в предыдущей задаче, и убедимся в правильности решения. Если учесть и отрицательные делители, которых столько же, сколько и положительных, то получится, что у данного числа всего будет 72 делителя.
Условие: определите, сколько делителей имеет 84.
Решение
Раскладываем число на множители.
844221712237
Записываем каноническое разложение: 84=22·3·7. Определяем, сколько у нас получится положительных делителей: (2+1)·(1+1)·(1+1) =12. Для учета отрицательных нужно умножить это число на 2:2·12=24.
Ответ: всего у 84 будет 24 делителя – 12 положительных и 12 отрицательных.
Как вычислить общие делители нескольких чисел
Зная свойства наибольшего общего делителя, можно утверждать, что количество делителей некоторого набора целых чисел будет совпадать с количеством делителей НОД тех же чисел. Это будет справедливо не только для двух чисел, но и для большего их количества. Следовательно, чтобы вычислить все общие делители нескольких чисел, надо определить их наибольший общий множитель и найти все его делители.
Разберем пару таких задач.
Условие: сколько будет натуральных общих делителей у чисел 140 и 50? Вычислите их все.
Решение
Начнем с вычисления НОД (140, 50).
Для этого нам потребуется алгоритм Евклида:
140=50·2+40, 50=40·1+10, 40=10·4, значит, НОД (50, 140)=10.
Далее выясним, сколько положительных делителей есть у десяти. Разложим его на простые множители и получим 20·50=1, 20·51=5, 21·50=2 и 21·51=10. Значит, все натуральные общие делители исходного числа – это 1, 2, 5 и 10, а всего их четыре.
Ответ: данные числа имеют четыре натуральных делителя, равные 10, 5, 2 и 1.
Условие: выясните, сколько общих положительных делителей есть у чисел 585, 315, 90 и 45.
Решение
Вычислим их наибольший общий делитель, разложив число на простые множители. Поскольку 90=2·3·3·5, 45=3·3·5, 315=3·3·5·7 и 585=3·3·5·13, то таким делителем будет 5: НОД (90, 45, 315, 585) =3·3·5=32·5.
Чтобы узнать количество этих чисел, нужно выяснить, сколько положительных делителей имеет НОД.
Считаем:
НОД (90, 45, 315, 585) =32·5:(2+1)·(1+1) =6.
Ответ: у данных чисел шесть общих делителей.
34K
06 апреля 2008 года
Carbon
17 / / 21.03.2008
Плохая задачка.
Только перебор, возможно, немного оптимизированный, больше ничего я в инете не нашёл, даже на сайте про последовательности, вот тут универсальной формулы для этой последовательности (миннимальное число с заданным количеством делителей) нет.
Немного опоздал с ответом, но вот моё решение:
1) Количество простых делителей 12 (2^12=4096, 2^13=8192). Будем работать с разложением числа. Тогда выписываем первые 12 простых чисел.
2) D раскладываем на простые множители и сопоставляем их каждому простому числу в порядке убывания (84=2*2*3*7 => 2:6, 3:2, 5:1, 7:1).
3) Получаем число 2^6*3^2*5^1*7^1. Проходим по степеням с конца массива. Если число уменьшится при переносе степени на более раннюю позицию, то выполнится условие: a^u*b^v>a^((u+1)*(v+1)-1) (a<b).
Получаем: lnb>(u+1)lna. Если это условие выполняется, то при переносе число уменьшится. Для максимального уменьшения выбираем минимум чисел (u+1)lna. Для числа a ставим степень (u+1)*(v+1)-1, для числа b – 0.
4) Проходим по массиву и находим произведение чисел a^u. Если число превышает 10^15+1, то останавливаемся.
Общая сложность алгоритма O(sqrt(D)). Можно оптимизировать шаг 3), но и так скорость высокая, поэтому не стОит. И никакого перебора не нужно.
Код:
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
const long long limit=100000I64*100000I64*100000I64+1I64;
double min,v;
long long res=1I64;
int D,nums[12]={2,3,5,7,11,13,17,19,23,29,31,37},
divisors[12],temp[12],count=0,index;
bool stop;
scanf(“%d”,&D);
index=sqrt((double)D);
for (int i=2;i<=index;)
if (D%i==0)
{
D/=i;
temp[count]=i-1;
count++;
}
else
i++;
if (D>1)
{
temp[count]=D-1;
count++;
}
for (int i=0;i<count;i++)
divisors[count-1-i]=temp;
for (int i=count-1;i>=1;i–)
{
min=30000.0;
for (int j=i-1;j>=0;j–)
{
v=(double)(divisors[j]+1)*log((double)nums[j]);
if (v<min)
{
min=v;
index=j;
}
}
if (min<log((double)nums))
{
divisors[index]=(divisors[index]+1)*(divisors+1)-1;
divisors=0;
}
}
stop=false;
for (int i=0;i<count&&!stop;i++)
for (int j=0;j<divisors&&!stop;j++)
{
res*=(long long)nums;
stop=res>limit;
}
if (stop)
printf(“0”);
else
printf(“%I64d”,res);
getchar();
getchar();
return 0;
}