Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 13:04   #1
Vampirius
Пользователь
 
Аватар для Vampirius
 
Регистрация: 25.09.2009
Сообщений: 22
По умолчанию Числа Мерсена

Задание: Дана последовательность оканчивающаяся 0. Не используя массивы найти в этой последовательности все простые числа Мерсена (N=2^i-1)
и посчитать их кол-во.
Среда выполнение: консольный делфи

Не могу осуществить проверку является ли число простым числом мерсена или нет
Лишь утратив всё до конца, мы обретаем свободу...©

Последний раз редактировалось Vampirius; 15.12.2009 в 22:09.
Vampirius вне форума Ответить с цитированием
Старый 15.12.2009, 13:37   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

В делфи 2^n - не означает возведение в степень
TwiX вне форума Ответить с цитированием
Старый 15.12.2009, 13:45   #3
Vampirius
Пользователь
 
Аватар для Vampirius
 
Регистрация: 25.09.2009
Сообщений: 22
По умолчанию

я к тому что эта же функция через обратный цикл для н ( от 20 до 1) и експоненту не хочет работать.
Лишь утратив всё до конца, мы обретаем свободу...©
Vampirius вне форума Ответить с цитированием
Старый 15.12.2009, 16:22   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Не простые числа Мерсенна, а "просто числа Мерсенна" (простота не важна)? Прибавляем единицу и проверяем двоичный логарифм. Если отличается от целого числа в пределах эпсилона - плюс к счетчику, иначе нет.
LeBron вне форума Ответить с цитированием
Старый 15.12.2009, 19:51   #5
Vampirius
Пользователь
 
Аватар для Vampirius
 
Регистрация: 25.09.2009
Сообщений: 22
По умолчанию

Важна...
я просто плохо представляю как на паскале записать
Лишь утратив всё до конца, мы обретаем свободу...©
Vampirius вне форума Ответить с цитированием
Старый 15.12.2009, 20:29   #6
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Если важна, то почему это не указано вначале?
С записью чего конкретно возникают проблемы? Словами скажите, что хотите написать - я переведу, или кто-то другой.
LeBron вне форума Ответить с цитированием
Старый 15.12.2009, 22:09   #7
Vampirius
Пользователь
 
Аватар для Vampirius
 
Регистрация: 25.09.2009
Сообщений: 22
По умолчанию

Поправил...
Лишь утратив всё до конца, мы обретаем свободу...©
Vampirius вне форума Ответить с цитированием
Старый 15.12.2009, 22:54   #8
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

На какие ограничения ориентироваться? Можно просто забить первые надцать чисел в память и сравнивать. А сами числа сгенерить в цикле. Тогда не будет необходимости кажый раз проверять число на простоту "более умным" алгоритмом. Или более торможенным, если на умный не хватит ума.
Такой вариант подходит?
LeBron вне форума Ответить с цитированием
Старый 05.01.2010, 20:51   #9
Vampirius
Пользователь
 
Аватар для Vampirius
 
Регистрация: 25.09.2009
Сообщений: 22
По умолчанию

Увы нет, нужен сам алгоритм решение для которого в теории можно посчитать любые числа...
Лишь утратив всё до конца, мы обретаем свободу...©
Vampirius вне форума Ответить с цитированием
Старый 06.01.2010, 07:27   #10
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
алгоритм решение для которого в теории можно посчитать любые числа...
1)Вводим число
2)Прибавляем к нему единичку
3)Проверяем является ли полученное число степенью 2
4)Если нет выход( это число не является числом Мерсенна)
5)Если да - то проверяем является ли полученная степень простым числом
6)Если нет - то выход(это число является числом Мерсенна но не является простым)
7)Если да - то введенное число-простое число Мерсенна
является ли число простым
Код:
function issimple(n:longint):boolean;
  var
  i:integer;
  begin
   issimple:=true;
   for i:=3 to round(sqrt(n)) do
   if n mod i= 0 then begin issimple:=false;break;end;
  end;
является ли число степенью 2
Код:
function Step2(n:longint):boolean;
var a:longint;
begin
a:=2;
while a<n do
a:=a*2;
if a=n then Step2:=true
else Step2:=false;
end;
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 06.01.2010 в 07:35.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вводим два числа, получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m Sparky Помощь студентам 2 22.11.2009 21:59
Как числа в двоичном виде вывести в столбик по 4 числа? Equalizer Общие вопросы C/C++ 11 27.09.2009 14:15
2 столбец для того, чтобы автоматически создавались числа, которые позволяли уравнивать числа в 3 столбце ppv Microsoft Office Excel 37 05.08.2009 21:19
Даны натуральные числа m,n. Посчитать сумму m последнего числа n. лялька Паскаль, Turbo Pascal, PascalABC.NET 6 25.12.2008 15:22
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49