3. Цели числа - представяне в десетична и двоична бройни системи. Прости числа. Мерсенови и съвършенни числа

Проверка дали дадено число е просто [стр. 41] - 2 варианта;
Теорема на Оперман - съществува просто число между n2 и (n+1)2 [стр. 41] ;

Определяне дали едно число е просто; Решето на Ератостен [стр. 42] - 3 варианта;

Да се напише програма за намиране на простите числа в зададен интервал [a,b] като се използва, че 2.3.5 = 30 и че кандидатите за прости числа от вида 30k + r са само 8 (за дадено k).

Сайт за прости числа Some Prime Numbers.

Хипотези на Голдбах [1.1.3]
1. Всяко цяло четно число може да се представи като сума на две прости числа.
2. Всяко цяло число > 17 може да се представи като сума на 3 различни прости числа.
   8849+8861+9769=27479
   9973+2+3=9978
Едно просто число се нарича Мерсеново, ако може да се представи във вида: 2p- 1, където p е просто [1.1.4, стр. 47].
Едно число се нарича съвършено, ако е равно на сумата от всички свои делители [1.1.4, стр. 48].
Теорема (Ойлер). Ако 2p-1 е просто, то 2p-1(2p- 1) е съвършено.

6, 28, 496, 8128, 33550336, ...
Аритметика за големи числа.
Пример: Сума на две числа, записани като C-низове.

// sum_str.cpp
#include <iostream>
using std::cout;

#include <cstring>
using std::strlen;

#define M 100

char *summa(char *a, char *b)
{
 char *c = new char[M];
 int lena = strlen(a);
 int lenb = strlen(b);
 int lenc = lena>lenb?lena:lenb+1;
 int k;
 for (k = 0; k < lenc; k++) c[k]='0';
 c[lenc] = '\0';
 int i, j, carry=0, d;
 for (i=lena-1, j=lenb-1, k=lenc-1; k>=0; i--, j--, k--)
 {
  int aa = (i>=0)?int(a[i]-'0'):0;
  int bb = (j>=0)?int(b[j]-'0'):0;
  d = aa + bb + carry;
  carry = (d>9)?1:0;
  c[k] = '0'+ d%10;
 }
 if (c[0]=='0')
   for (k=0; k<lenc; k++) c[k]=c[k+1];
 return c;
}

int main()
{
 char a[M] = "11111111111111111111";
 char b[M] = "29999191919191";
 cout << a << " + " << b << " = " << summa(a,b) << "\n";
 return 0;
}