Доброго времени суток, хабражители. Я хотел бы рассказать об алгоритме, который был применён мной для вычисления чисел Мерсена, а также о реализации этого алгоритма на С++. И так, поехали!

Сказ о том, как мы Алгоритм искали

Как-то раз, прочитав о простых числах Мерсена, я захотел вычислить хотя-бы одно такое большое число. Проблема заключалась в том, что ни один тип данных языка С++ не обладает нужным диапазоном. И вдруг одним февральским днём на меня снизошло озарение. А что, если число разбить по разрядам и записать в массив? Вспомнив начальные классы (точнее, правила умножения столбиком), и проанализировав тип int>, я пришёл к выводу, что оптимальным вариантом будет разбиение числа по 4 разряда и запись его в int-овый массив. При этом, если в ячейке получается число, большее 9999, то отделяем старший разряд и записываем его в следующую ячейку. Ура, человеческий алгоритм есть! Приступаем к написанию кода.

О коде

Вот, собственно, сам код
//---------------------------------------------------------------------------
#include<iostream>
#include<locale>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

using namespace std;

#define MySize 10000000

int main() {

	setlocale(LC_ALL, "RU");
	int *stepen = new int[MySize];
//	int *rezult = new int[MySize];
//	int c=0;

	int b=1;
    memset(stepen,0, MySize*sizeof(int));

	stepen[0]=2;

	int a;
	cin >> a;
	for (int i=1; i<a; i++) {
                   for(int k=b-1;k>=0;k--){
				stepen[k]*=2;
			    if (stepen[k] / 10000>=1) {
					stepen[k+1] += stepen[k]/10000;
					stepen[k] %= 10000;
   				    if(k == b-1) b++;
				}
			}
	}
        stepen[0]--;
  	for (int i=b-1; i>=0; i--) cout << stepen[i];
cout << '\n';

system("PAUSE");
return (0);	}


Если вы посмотрели код, то, наверное, заметили, что он ещё далёк от совершенства.

1. Я не могу предсказать, насколько большое число ищет пользователь, поэтому зарезервировал 10000000 ячеек массива.

2. Число не помещается в консоль, поэтому нужно реализовать вывод в файл (работаю над этим).

Алгоритм работает (было проверено на первых 50 числах). Буду рад выслушать предложения по улучшению кода.