Можно ли сказать, сколько потребуется оперативки для формирования в памяти 10^11 простых?
Если я правильно помню, то для
простых 8GB оперативки хватает, 4GB - вроде нет.
Есть ли способ быстро на ходу формировать свой массив простых, быстро его пополнять и быстро в нём искать?
Не знаю, насколько это поможет, но вот моя реализация хеш-таблицы (все ключи должны быть уникальными):
Код:
\\ create hashtable
{ ht_create() = [Set(),listcreate()] }
\\ kill hashtable
{ ht_kill(h) = listkill(h[2]); }
\\ insert (key,value) into hashtable
{ ht_insert(h,key,value) = local(p,l);
\\ print(h);
p = setsearch(h[1],key);
if(p, h[2][p]=value; return(h));
p = setsearch(h[1],key,1);
l=h[2];
if(p>#l,listput(l,value),listinsert(l,value,p));
return([setunion(h[1],Set([key])),l]);
}
\\ check if key is defined in the hashtable
{ ht_search(h,key) = setsearch(h[1],key); }
\\ query value for a given key
{ ht_value(h,key) = local(p);
p = setsearch(h[1],key);
if(p==0,error("ht_value error: key ",key," is not in the hashtable"));
return(h[2][p]);
}
-- Sat Sep 25, 2010 13:48:37 --P.S. Если встроенных возможностей PARI/GP не хватает, то можно переключиться на C/C++ и использовать PARI в качестве библиотеки.