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;
}