Вопрос № 175151: зДРАВСТВУЙТЕ.. прошу помощь у экспертов в написании програмки на C++. Дано натуральное число n. Установить, является ли оно числом Мерсена (простое число называется числом Марсена, если оно равно 2^p-1, где p тоже натуральное число). Заранее благодар...
Вопрос № 175151:
зДРАВСТВУЙТЕ.. прошу помощь у экспертов в написании програмки на C++. Дано натуральное число n. Установить, является ли оно числом Мерсена (простое число называется числом Марсена, если оно равно 2^p-1, где p тоже натуральное число). Заранее благодарю. (если чо- chickencat@mail.ru)
Отвечает 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 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает leonid59, Студент :
Здравствуйте, chickencat. Существует два определения чисел Мерсенна. 1. Натуральное число, если оно равно 2^p-1, где p тоже натуральное число 2. Простое число, если оно равно 2^p-1, где p тоже простое число Соответственно, в приложении две программы. Идея вычисления в следующем. Прибавим единицу к тестируемому числу. Если это число Мерсенна, оно является степенью двойки, тогда создадим битовую маску и в цикле производим операцию побитового "И". В результате получим либо ноль, либо единицу.
Если это степень двойки, должна быть одна единица в каком-то из разрядов, остальные нули. В варианте 2 необходимо еще проверить показатель степени.
Приложение:
Ответ отправил: leonid59, Студент
Ответ отправлен: 12.12.2009, 21:56
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257646
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает 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; } }
Алгоритм основан на том, что требуемое число во всех своих двоичных разрядах содержит единицы. Напр. 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 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.