Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1440
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1371
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 1245
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1448
Дата выхода:17.12.2009, 14:00
Администратор рассылки:Dr_Andrew, Старший модератор
Подписчиков / экспертов:677 / 180
Вопросов / ответов:1 / 3
IRC-канал по теме:#C

Вопрос № 175151: зДРАВСТВУЙТЕ.. прошу помощь у экспертов в написании програмки на C++. Дано натуральное число n. Установить, является ли оно числом Мерсена (простое число называется числом Марсена, если оно равно 2^p-1, где p тоже натуральное число). Заранее благодар...



Вопрос № 175151:

зДРАВСТВУЙТЕ.. прошу помощь у экспертов в написании програмки на C++. Дано натуральное число n. Установить, является ли оно числом Мерсена (простое число называется числом Марсена, если оно равно 2^p-1, где p тоже натуральное число). Заранее благодарю. (если чо- chickencat@mail.ru)

Отправлен: 12.12.2009, 05:46
Вопрос задал: chickencat, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает F®ost, Советник :
Здравствуйте, chickencat.
Думаю, что программа не вышла сложной.
Код:
#include < iostream>
#include < conio.h>
using namespace std;
unsigned long long NumberToPower(unsigned short number, unsigned int power);
unsigned long long Mersen(unsigned int power);
int main()
{
unsigned int power=0;
cout<< "do kakogo chelena vvbIvodit? "<< endl;
cin>>power;
Mersen(power);
getch();
return 0;
}
unsigned long long Mersen(unsigned int power)
{
const unsigned short x=2;
while (power>0)
{
cout<< NumberToPower(x,power)-1<< " ";
power--;
}
}
unsigned long long NumberToPower(unsigned short number, unsigned int power)
{
if (power == 1)
return number;
if (power == 0)
return 1;
return (number*NumberToPower(number,power-1));
}
Удачи!
-----
От вопроса к ответу, от проблемы к решению

Ответ отправил: F®ost, Советник
Ответ отправлен: 12.12.2009, 10:14
Беларусь, Минск
Тел.: 375292792018
Организация: Минский Промтранспроект
Адрес: ул. В.Хоружей, 13, г. Минск, Беларусь

Оценка ответа: 5
Комментарий к оценке:
Пасиб большое))))))!!!!!!!!!!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 257634 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает leonid59, Студент :
    Здравствуйте, chickencat. Существует два определения чисел Мерсенна.
    1. Натуральное число, если оно равно 2^p-1, где p тоже натуральное число
    2. Простое число, если оно равно 2^p-1, где p тоже простое число
    Соответственно, в приложении две программы.
    Идея вычисления в следующем. Прибавим единицу к тестируемому числу. Если это число Мерсенна, оно является степенью двойки, тогда создадим битовую маску и в цикле производим операцию побитового "И". В результате получим либо ноль, либо единицу. Если это степень двойки, должна быть одна единица в каком-то из разрядов, остальные нули. В варианте 2 необходимо еще проверить показатель степени.

    Приложение:

    Ответ отправил: leonid59, Студент
    Ответ отправлен: 12.12.2009, 21:56

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 257646 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Micren, Бакалавр :
    Здравствуйте, chickencat.
    Программа.С++.MS VS 2008.

    Код:
    #include <iostream>
    #include <iomanip>

    using namespace std;

    typedef unsigned long long _long;

    // Проверяет является ли число числом Мерсенна
    bool isMersen(_long num)
    {
    if(num)
    {
    // Пока не найден нулевой бит
    while(num&1)
    {
    // Сдвигаем вправо
    num>>=1;
    };
    // Если num!=0 то число не является числом Мерсенна
    return !num;
    }
    else
    {
    return false;
    }
    }

    int main()
    {
    _long num;
    cout<<"Enter number:";
    cin>>num;
    cout<<"isMersen("<<num<<")="<<boolalpha<<isMersen(num)<<endl;
    system( "PAUSE");
    return 0;
    }

    Алгоритм основан на том, что требуемое число во всех своих двоичных разрядах содержит единицы. Напр. 28-1=25510=111111112
    Поэтому производится проверка на отсутствие в числе двоичных нулей.
    Примеры работы:
    Код:
    Enter number:20
    isMersen(20)=false

    Enter number:254
    isMersen(254)=false

    Enter number:255
    isMersen(255)=true

    Enter number:18446744073709551615
    isMersen(18446744073709551615)=true

    Ответ отправил: Micren, Бакалавр
    Ответ отправлен: 12.12.2009, 22:48

    Оценка ответа: 5

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 257651 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.12 от 30.11.2009

    В избранное