Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 18.12.2014
Сообщений: 4

Бесконечный список совершенных чисел

18.12.2014, 19:19. Показов 3624. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста дополнить программу. Вот задание:

Сгенерировать бесконечный список совершенных чисел.

Пока что, мой код находит сами делители заданного числа. Но как теперь сделать так, чтобы, программа находила сумму этих делителей? И как дополнить функцию, так чтобы не пользователь вводил число, а бралось число с бесконечно генерирующегося списка?

Haskell
1
factor n = [m | m <- [1..n `div` 2], mod n m == 0]
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2014, 19:19
Ответы с готовыми решениями:

Опишите бесконечный список чисел [1,-1,1,-1,...]
А) опишите бесконечный список чисел Б) с помощью этого списка, списка и функции zipWith опишите бесконечный список Заранее спасибо)

Бесконечный список чисел Пелля-Люка
а) Используя функцию iterate, написать функцию, которая строит бесконечный список чисел Пелля-Люка б) Написать функцию, которая читает...

Создать бесконечный список символов, получающихся последовательной записью натуральных чисел
Помогите пожалуйста с заданием, необходимо создать бесконечный список символов, получающихся последовательной записью натуральных чисел: ,...

12
112 / 86 / 21
Регистрация: 06.06.2011
Сообщений: 427
Записей в блоге: 1
18.12.2014, 20:57
Можно так. Но 4 числа ищет уже очень долго:
Haskell
1
2
3
4
5
6
7
8
9
10
factor n = [m | m <- [1..n `div` 2], mod n m == 0]
 
summ l = foldr (+) 0 l --сумма всех элеменов в массиве
 
isSuper n = n == (summ (factor n)) --проверяем на крутость
 
supers = [m | m <- [1..], isSuper m] --бесконечный список совершенных
 
main = do
    putStrLn $ show $ take 3 supers --показываем три первых совершенных числа
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
18.12.2014, 20:59
1. Как найти сумму делителей, когда есть функция factor?
Haskell
1
factorSum = sum . factor
2. Как проверить, является ли данное число совершенным?
Haskell
1
isPerfect n = factorSum n == n
3. Как организовать бесконечных список из чисел, которые удовлетворяют заданному условию, например, isPerfect?
Haskell
1
perfectList = filter isPerfect [1..]
Соединить в один код сможете?
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
18.12.2014, 21:03
В книжке написана и строчка Вашего кода и строчка выше неё. Почему бы не взять оттуда:
Haskell
1
2
3
perfects = filter (\ n -> sum (factors n) == n) [1..]
 
factors n = [i | i <- [1..n `div` 2], n `mod` i == 0]
Число из бесконечного списка можно взять так perfects !! 2
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,709
Записей в блоге: 14
18.12.2014, 21:07
По имеющимся сведениям неясно, бесконечно ли множество совершенных чисел.
0
112 / 86 / 21
Регистрация: 06.06.2011
Сообщений: 427
Записей в блоге: 1
18.12.2014, 21:09
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Число из бесконечного списка можно взять так perfects !! 2
Это если одно. А вообще, принято использовать take.

Все решения очень долгие. Интересно, можно ли за преемлемое время найти первые 10 чисел? (на моем слабеньком ноуте, 4 числа считаются 35 секунд, 3 - 0.6сек)
0
0 / 0 / 0
Регистрация: 18.12.2014
Сообщений: 4
18.12.2014, 21:14  [ТС]
Спасибо большое за быстрый ответ! Всё конечно хорошо, но вот незадача. Я пользуюсь Haskell GHCi, который в консольном режиме, и при попытке запуска выводит ошибку такого рода: parse error on input '=' или Failed, modules loaded: none. Я с этим не раз сталкиваюсь, пробовал разные версии - не помогало. Что делать, я не знаю. Какого ему модуля не хватает?

Добавлено через 2 минуты
Да, множество совершенных чисел бесконечно.
0
112 / 86 / 21
Регистрация: 06.06.2011
Сообщений: 427
Записей в блоге: 1
18.12.2014, 21:15
попробуй перед формулой набирать "let":

Haskell
1
let f a = a + 1
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,709
Записей в блоге: 14
18.12.2014, 21:33
Цитата Сообщение от popadinets_ru Посмотреть сообщение
Да, множество совершенных чисел бесконечно.
- источник? Википедия утверждает обратное. Кроме того алгоритм можно ускорить вдвое (рассматривая только четных "претендентов" на совершентство), т.к. все найденные до сих пор совершенные числа - четные.
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
18.12.2014, 21:41
Цитата Сообщение от Catstail Посмотреть сообщение
Кроме того алгоритм можно ускорить вдвое (рассматривая только четных "претендентов" на совершентство)
Haskell
1
2
3
perfects = filter (\ n -> sum (factors n) == n) [2,4..]
 
factors n = [i | i <- [1..n `div` 2], n `mod` i == 0]
0
0 / 0 / 0
Регистрация: 18.12.2014
Сообщений: 4
18.12.2014, 21:46  [ТС]
Чётные совершенные числа подойдут, но опять же, реализовать я сам не смогу. Знаю разве что, что чётная последовательность задаётся так:
Haskell
1
[2,4..]
Добавлено через 1 минуту
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Haskell
1
2
3
perfects = filter (\ n -> sum (factors n) == n) [2,4..]
 
factors n = [i | i <- [1..n `div` 2], n `mod` i == 0]
Простите, не заметил. Я изменял последовательность оказывается в третьей строке.
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
18.12.2014, 22:07
Не знаю как там в теории, а простейшая оптимизация в голову пришла
Haskell
1
2
3
4
5
6
7
8
9
perfects = filter (\ n -> chk' (factors n) n) [2,4..]
  where chk' fs n = chk fs 0  
            where chk []     s = n == s
                  chk (x:xs) s = 
                        case x+s of
                            s'  | s' > n    -> False
                                | otherwise -> chk xs s' 
 
factors n = [i | i <- [1..n `div` 2], n `mod` i == 0]
0
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
19.12.2014, 07:00
Как вариант, на основе своего кода на Clojure из этой темы:
https://www.cyberforum.ru/lisp/thread1295626.html
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module Main where
 
primes :: Integral a => [a] -> [a]
primes [] = []
primes (x:xs) = x : primes (filter (\p -> rem p x /= 0) xs)
 
-- Lucas-Lehmer primality test.
llt :: Integer -> Bool
llt p = p == 2 || loop 3 (4 :: Integer)
  where loop n s = if n > p then s == 0 else loop (succ n) (rem (s*s - 2) $ pred(2^p))
 
task :: [Integer]
task = foldr (\x acc -> if llt x then 2^(pred x) * pred(2^x) : acc else acc) [] $ primes [2..]
 
main :: IO ()
main = print $ take 10 task
 
-- [6,28,496,8128,33550336,8589869056,137438691328,2305843008139952128,2658455991569831744654692615953842176,191561942608236107294793378084303638130997321548169216]
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2014, 07:00
Помогаю со студенческими работами здесь

Бесконечный список натуральных чисел (значения n^2 - 1 и факториалы натуральных чисел)
Собственно, необходимо написать выражение для вычисления значения*func :: , представляющего собой бесконечный список натуральных чисел,...

Бесконечный чередующийся список мороженого
data Sort = Vanil | Malina | Shokolad deriving Show data Ice = Ice Sort Ice | Waflja infinityIce :: Ice infinityIce = let list = map...

Составить бесконечный список последовательностей биномиальных коэффициентов
Здравствуйте! Так вышло, что в сжатые сроки нужны решения некоторых задач. Решал бы сам, если бы не был занят проектом. Как уже поняли с...

Потенциально бесконечный список с условием внутри выражения
Стоит задача: &quot;вывести числа фибоначчи, меньше 4 миллионов&quot;. fib = 1:1: --возвращаем последовательность фибоначи, у которой...

а) Задать бесконечный список. б) Найти в нем указанную величину
а) Квадратные пирамидальные числа – 1,5,14,30..б)количество кратных 5 чисел, меньших 1000.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru