Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Haskell] Гипотеза Гольдбаха 
V
    Опции темы
Joil
Дата 8.11.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



Всем привет!
Есть такая задача:
Гипотеза Гольдбаха: Любое четное число > 2 представимо в виде суммы двух простых чисел.
Напишите функцию f m :: Integer -> Bool, проверяющую гипотезу Гольдбаха для всех четных чисел, больших 2 и меньших m.

Вот, какие есть вункции:
Код

factors :: Integer -> [Integer]
--функция фычисляет список всех делителей числа
factors n = [k | k <- [1..n], n `mod` k == 0]

isprime :: Integer -> Bool
--функция определяет является ли число простым
isprime n = factors n == [1, n]

primesupto :: Integer -> [Integer]
функция возвращает  список, содержащий все простые числа до числа n включительно
primesupto n = [k | k <- [3..n], isprime k]

Что делать дальше, пока не могу сообразить...
Буду благодарен за любую помощь!!!
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
Shaggie
Дата 18.11.2008, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Цитата(Joil @  8.11.2008,  14:38 Найти цитируемый пост)
Гипотеза Гольдбаха: Любое четное число > 2 представимо в виде суммы двух простых чисел.
Напишите функцию f m :: Integer -> Bool, проверяющую гипотезу Гольдбаха для всех четных чисел, больших 2 и меньших m.


Смотри. Функция должна 1) проверять, что число больше двух, иначе возвращать False; 2) проверять, что число чётное, иначе возвращать False; 3) для любого числа x, проходящего проверку, получать два списка простых чисел от 1 до x, получать список всех возможных сложений элементов первого списка с элементам второго списка (итог - суммы двух простых чисел), и проверять вхождение элемента x в полученном списке.
Код

m   :: Integer -> Bool
m x |  x < 3 = False
    |  odd x = False
    |  otherwise = x `elem` [y + z | y <- primesupto x, z <- primesupto x]


P.S. Некоторые детали реализации.
1) Функция primesupto реализована не совсем верно, она должна проверять на простоту числа в списке не [3..n], а [1..n], т.к. 1 и 2 тоже простые числа. Проверка для гипотезы Гольдбаха вставляется в финальное m.
2) Функция isprime вернёт неправильный результат для числа 1, которое, несомненно, тоже является простым, так как ожидает, что в списке будет больше одного элемента. Корректнее было бы переписать её таким образом:
Код

isprime   :: Integer -> Bool
isprime n |  factors n == [1] = True
          |  otherwise = factors n == [1, n]


Hope it'll help.

Добавлено через 1 минуту и 47 секунд
Как вариант, можно не возвращать False на x < 3 и odd x, а выбрасывать error с ругательством, ну это уже не важно - смотри как тебе больше нравится.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0386 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.