Решето Александрова
Решето Александрова — это надёжный алгоритм вывода всех простых чисел до некоторого целого числа n. Он отличается от широко известного решета Эратосфена и более современного решета Аткина компактностью реализации на любом языке программирования. Основан же алгоритм на подходе, предложенном индийским математиком-студентом С.П.Сундарамом в 40-х годах XX в.

Формализацию этого общепризнанного метода осуществил Г.Александров , а многие российские и зарубежные исследователи создали на базе её удобные процедуры-фукции [см., например, http://tzone.mag.tc/projects/primes/js.html (автор - Стефан Легачёв)] :

Суть алогоритма такова: достаточно из натурального числового ряда исключить все значения

Z = i + j + 2 i j ,

где: i = 1 , 2 , 3 , ... , n ; j = 1 , 2 , 3 , ... i ,

а оставшиеся числа N умножить на 2 и прибавить 1. Это и будет ряд простых чисел p.

Программа на Yabasic выглядит так:

dim a(10000)
n=2000:a1=2:print a1;
for i=1 to n :for j=1 to i: a=i+j+2*i*j: if a<=2*n+1 then a(a)=1:fi:next j: next i
for k=1 to n: if a(k)=0 then
print 2*k+1;:fi:next k

С.Легачёв переписал алгоритм на JavaScript и его теперь можно встраивать в код html-страниц.

Функция совсем несложная:

function getPrimes (UpTo) {

*/
var selprimes = new Array();
var n = Math.floor( (UpTo - 1)/2 );
var result = new Array();
if (UpTo > 1) result[0] = 2;
for (i = 1; i <= UpTo; i++) {
selprimes[i] = true;
}
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
if (i + j + 2*i*j <= UpTo) selprimes[i + j + 2*i*j] = false;
}
}
for (i = 1; i <= n; i++) {
if (selprimes[i] == true) result[result.length] = 2*i + 1;
}
return (result);
}


Еще проще процедура-функция будет выглядеть в математическом редакторе Maple.

Решето Александрова рекомендуется использовать в качестве стандартной подпрограммы.

Ссылки:
http://users.omskreg.ru/~project/SZ/z2/13.html
http://masterms.narod.ru/sundaram.html

.................................................
 

Хостинг от uCoz