Задачка по си++,очень интересная=)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

MaksSsimuS
Сообщения: 4
Зарегистрирован: 23 май 2008, 18:58

Дано натуральное число n. Найти все меньшие n числа Мерсена. Простое число называется числом Мерсена, если оно может быть представлено в виде (2^p)-1 , где p – тоже простое число.
Буду очень признателен,если поможете или подскажете,как ее решать=).... :)
chnry
Сообщения: 20
Зарегистрирован: 15 дек 2007, 15:30

393877844
Могу за 500 руб продать прогу, которая проверяет, является ли число простым. Длина числа от 1 до 255 цифр.
chnry
Сообщения: 20
Зарегистрирован: 15 дек 2007, 15:30

Прога написана на языке Паскаль
Аватара пользователя
un4-funeral
Сообщения: 60
Зарегистрирован: 18 апр 2008, 23:40
Контактная информация:

определить простое число или нет легко

прогоняем цикл от одного до n и смотрим делится ли n на это число без остатка
если без остатка, то наращиваем какую-то переменную

если после прохождения цикла она = 2, то число простое

а по задаче
заносишь в массив все числа простые от 1 до n (как определить простые я уже написал)
а потом по формуле твоей (2^p)-1 проверяешь каждый элемент массива к твоему n


chnry, щутник )))
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

un4-funeral, да будет вам, все еще проще. Цикл достаточно проводить от 2 до корня из N. Вообще в разделе Алгоритмы это есть.

>>заносишь в массив все числа простые от 1 до n (как определить простые я уже написал) а потом по формуле твоей (2^p)-1 проверяешь каждый элемент массива к твоему n
Каждый - не надо. Как только 2^p-1 превысит N, цикл можно прерывать.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

Вообщем-то, практически определить является ли достаточно большое число простым, не такая, мягко скажем, простая задача :) . Японские криптологи год раскладывали на множители 300-битное число (90 десятичных порядков). И это с использованием хрен знает каких машин и извращенных алгоритмов.
А тут все удовольствие за 500 руб. Улыбнул :)

А по задаче. Тупо составляешь заранее массив из простых чисел Мерсена (благо их совсем мало) и простым пробегом по массиву определяешь количество чисел меньше n. Всё.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

MaksSsimuS писал(а):Простое число называется числом Мерсена, если оно может быть представлено в виде (2^p)-1 , где p – тоже простое число.
Че-то мне смутно помнится, что если p не является простым, то и (2^p)-1 тоже не будет простым... Или противоположное утверждение верно: если p - простое, то и (2^p)-1 тоже простое. А, может, оба верны... Не помню уже.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Второе явно неверно. 3 - простое, 2^3-1=8, не простое
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Хыиуду писал(а):Второе явно неверно. 3 - простое, 2^3-1=8, не простое

Так вроде 7 получается.
MaksSsimuS
Сообщения: 4
Зарегистрирован: 23 май 2008, 18:58

Да,так и получается,если мы берем простое число p,то у нас в результате будет тож простое.....но скажите,как определить число p простым.....по идее оно должно делиться только на себя и на 1.так получаеся,что надо определенное число брать и делить на все числа стоящие перед ним???чтобы определить простоту???или как проще?и как выделить памятьт под массив???подскажите=)
Ответить