16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
||||||
1 | ||||||
Алгоритм проверки числа на "совершенность"09.07.2013, 17:31. Показов 8989. Ответов 42
Метки нет (Все метки)
Приветствую всех!
Прошу помочь со следующей задачей: "Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. Число 6 – совершенное, так как 6 = 1+2+3. Число 8 – не совершенное, так как 8 ≠ 1+2+4.Дано натуральное число n. Получить все совершенные числа, меньшие n." Задачу я решил (код ниже), но работает программа слишком медленно. Пожалуйста помогите оптимизировать код, нужно чтобы программа требовала, как можно меньше памяти и работала быстрее.
Заранее всем благодарен))
0
|
09.07.2013, 17:31 | |
Ответы с готовыми решениями:
42
Проверка числа на совершенность Реализовать эффективный алгоритм проверки числа на простоту и подсчета количества делителей натурального числа Алгоритм проверки делимости числа на 7 Быстрый алгоритм проверки числа на простоту Нужен алгоритм проверки большого числа на простоту |
09.07.2013, 20:04 | 21 |
Спасибо, что понимаете в том алгоритме по сути не используется свойство:
если a делитель n, то и n/a тоже делитель, там еще более крутые моменты (мультипликативные функции), поэтому быстро работает P.S. а то бы не выставлял бы тот алгоритм. интересно было поработать с мульт.функциями, после чего пришла идея такого алгоритма.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
09.07.2013, 20:23 | 23 |
Kukurudza, я что то разве говорил об умножении? Я сравнивал с битовыми операциями.
0
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
||||||
10.07.2013, 09:36 [ТС] | 24 | |||||
ValeryS, спасибо за замечания)) Сразу как-то и не подумал над х/2.
Чуть-чуть причесал код: Кликните здесь для просмотра всего текста
Kukurudza, благодарю за вики, появились кое какие мысли) Использование последовательности чисел Мерсенне способ весьма годный на практике, но когда речь идёт об алгоритмизации думаю не совсем уместен. Это оценка скорости выполнения или количества операций алгоритма? Можно подробнее? Thinker, Ваш алгоритм нахождения делителей числа действительно очень быстро работает. Еще не разобрался как он работает... Вообщем по алгоритму проверки числа на совершенность пока идей больше нет, а вот как сократить количество итераций проверки самих чисел меньше заданного n (по условию) есть. Заинтересовало сл. св-во совершенных чисел в вики: "Все чётные совершенные числа в двоичной записи содержат сначала p единиц, за которыми следует p—1 нулей (следствие из их общего представления)." Таким образом можно было бы проверять все числа от 4 до n сначала на удовлетворение этому условию (операция, как я полагаю, менее затратная, если не ошибаюсь) и только проходящие по нему проверять на совершенность.
0
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
|
|
10.07.2013, 10:02 | 26 |
ей богу, у меня иногда складывается мнение что только у меня гугл разбанен:
http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F а вообще это у вас академическая задача или какая-то практическая? решили нобеля получить поди?
0
|
2 / 2 / 1
Регистрация: 17.04.2012
Сообщений: 22
|
|
10.07.2013, 10:17 | 27 |
если интересно разобраться с О( ) и с другими её друзьями - "Алгоритмы построения и анализ" авторы: Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн)
1
|
10.07.2013, 12:31 | 28 |
Naudiz,
Быстрый поиск совершенных чисел
0
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
||||||
12.07.2013, 20:50 [ТС] | 29 | |||||
Thinker, благодарю, то что нужно. Можно вопрос по Вашему коду?
Эта запись в дальнейшем фигурирует в выражениях в main
0
|
12.07.2013, 20:57 | 31 |
Самый быстрый поиск совершенных чисел. Берем гугл. Сбиваем "OEIS совершенные числа". Находим эту страницу - http://oeis.org/A000396 Копируем все числа в константы (хоть в строковые). Организуем поиск по константам. Радуемся сложности O(1)
0
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
|
12.07.2013, 21:03 [ТС] | 32 |
Thinker, не понял. В Вашем коде именно llu и он компилируется и работает))
Добавлено через 45 секунд Dani, не смешно.
0
|
12.07.2013, 21:07 | 34 | |||||
Никто шутить и не собирался. Работает быстро и правильно.
0
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
|
12.07.2013, 21:15 [ТС] | 37 |
Dani, речь идёт именно об "алгоритме проверки числа на совершенность", а не о выводе совершенных чисел на экран.
Thinker, а что происходит в 57 строке? Заранее извиняюсь, мне еще не по зубам такой код(
0
|
12.07.2013, 21:19 | 39 |
Dani, программа дает иллюзию, что если вдруг ОЗУ позволит хранить очень большие числа, то с ее помощью можно найти еще несколько дополнительных чисел, не вошедших в ТОП10
Добавлено через 2 минуты это просто. с помощью побитовых операций вычисляем значение
0
|
12.07.2013, 21:23 | 40 |
но она ведь правильно проверяет число на совершенность. что и требовалось
Что ТС просил - все условия выполняются. Если нужно научиться находить совершенные числа или в учебных целях - то с твоим кодом никто не конкурирует, но пусть большие числа считает, например, этот сайт http://oddperfect.org/ Да и BigInt юзать как-то неохота в связи с затратами и повышением сложности кода.
1
|
12.07.2013, 21:23 | |
12.07.2013, 21:23 | |
Помогаю со студенческими работами здесь
40
Алгоритм выделения разрядов числа и проверки, есть ли среди них нечетная цифра Составить алгоритм проверки гипотезы Гольдбаха о представлении каждого чётного числа в виде суммы двух простых Дано четырехзначное число. Составить алгоритм выделения его разрядов и проверки, составляют ли цифры числа упорядоченную последовательность. Написать код программы проверки целого числа на симметрию , проверки строки на симметрию символов нахождение среднего арифметического всего массива и проверка на совершенность Алгоритм проверки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |