|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
||||||
Алгоритм проверки числа на "совершенность"09.07.2013, 17:31. Показов 11425. Ответов 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 | ||
в том алгоритме по сути не используется свойство:если a делитель n, то и n/a тоже делитель, там еще более крутые моменты (мультипликативные функции), поэтому быстро работает ![]() P.S. а то бы не выставлял бы тот алгоритм. интересно было поработать с мульт.функциями, после чего пришла идея такого алгоритма.
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||
| 09.07.2013, 20:18 | |||
i5 нет проверить не могуно до него div достаточно дорогая операция была
0
|
|||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 09.07.2013, 20:23 | |
|
Kukurudza, я что то разве говорил об умножении? Я сравнивал с битовыми операциями.
0
|
|
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
|||||||
| 10.07.2013, 09:36 [ТС] | |||||||
|
ValeryS, спасибо за замечания)) Сразу как-то и не подумал над х/2.
Чуть-чуть причесал код: Кликните здесь для просмотра всего текста
Kukurudza, благодарю за вики, появились кое какие мысли) Использование последовательности чисел Мерсенне способ весьма годный на практике, но когда речь идёт об алгоритмизации думаю не совсем уместен. Thinker, Ваш алгоритм нахождения делителей числа действительно очень быстро работает. Еще не разобрался как он работает... Вообщем по алгоритму проверки числа на совершенность пока идей больше нет, а вот как сократить количество итераций проверки самих чисел меньше заданного n (по условию) есть. Заинтересовало сл. св-во совершенных чисел в вики: "Все чётные совершенные числа в двоичной записи содержат сначала p единиц, за которыми следует p—1 нулей (следствие из их общего представления)." Таким образом можно было бы проверять все числа от 4 до n сначала на удовлетворение этому условию (операция, как я полагаю, менее затратная, если не ошибаюсь) и только проходящие по нему проверять на совершенность.
0
|
|||||||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
||
| 10.07.2013, 10:02 | ||
|
http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F а вообще это у вас академическая задача или какая-то практическая? решили нобеля получить поди?
0
|
||
|
2 / 2 / 1
Регистрация: 17.04.2012
Сообщений: 22
|
|
| 10.07.2013, 10:17 | |
|
если интересно разобраться с О( ) и с другими её друзьями - "Алгоритмы построения и анализ" авторы: Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн)
1
|
|
|
|
|
| 10.07.2013, 12:31 | |
|
Naudiz,
Быстрый поиск совершенных чисел
0
|
|
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
||||||
| 12.07.2013, 20:50 [ТС] | ||||||
|
Thinker, благодарю, то что нужно. Можно вопрос по Вашему коду?
Эта запись в дальнейшем фигурирует в выражениях в main
0
|
||||||
| 12.07.2013, 20:57 | |
|
Самый быстрый поиск совершенных чисел. Берем гугл. Сбиваем "OEIS совершенные числа". Находим эту страницу - http://oeis.org/A000396 Копируем все числа в константы (хоть в строковые). Организуем поиск по константам. Радуемся сложности O(1)
0
|
|
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
|
| 12.07.2013, 21:03 [ТС] | |
|
Thinker, не понял. В Вашем коде именно llu и он компилируется и работает))
Добавлено через 45 секунд Dani, не смешно.
0
|
|
| 12.07.2013, 21:07 | |||||||
0
|
|||||||
|
16 / 14 / 7
Регистрация: 04.11.2011
Сообщений: 137
|
|
| 12.07.2013, 21:15 [ТС] | |
|
Dani, речь идёт именно об "алгоритме проверки числа на совершенность", а не о выводе совершенных чисел на экран.
Thinker, а что происходит в 57 строке? Заранее извиняюсь, мне еще не по зубам такой код(
0
|
|
|
|
||
| 12.07.2013, 21:19 | ||
|
Dani, программа дает иллюзию, что если вдруг ОЗУ позволит хранить очень большие числа, то с ее помощью можно найти еще несколько дополнительных чисел, не вошедших в ТОП10
![]() Добавлено через 2 минуты
0
|
||
| 12.07.2013, 21:23 | |||
|
Если нужно научиться находить совершенные числа или в учебных целях - то с твоим кодом никто не конкурирует, но пусть большие числа считает, например, этот сайт http://oddperfect.org/ Да и BigInt юзать как-то неохота в связи с затратами и повышением сложности кода.
1
|
|||
| 12.07.2013, 21:23 | |
|
Помогаю со студенческими работами здесь
40
Быстрый алгоритм проверки числа на простоту Нужен алгоритм проверки большого числа на простоту Алгоритм выделения разрядов числа и проверки, есть ли среди них нечетная цифра Составить алгоритм проверки гипотезы Гольдбаха о представлении каждого чётного числа в виде суммы двух простых Дано четырехзначное число. Составить алгоритм выделения его разрядов и проверки, составляют ли цифры числа упорядоченную последовательность. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|