Pagini recente » Cod sursa (job #840060) | Cod sursa (job #1694593) | Cod sursa (job #1730236) | Cod sursa (job #2589328) | Cod sursa (job #197161)
Cod sursa(job #197161)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <vector>
#define B 18
#define maxh 200003
using namespace std;
struct nod { int v; nod *n;};
//nod *H[maxh];
int H[maxh][23];
int R;
inline int isprime(int n)
{
if(n%2==0) return 0;
for(int i=3;i*i<=n;i+=2)
if(n%i==0)return 0;
return 1;
}
inline void getR()
{
for(R=200000;;++R)
if(isprime(R)) break;
}
inline void insert(int v)
{
int h=v%maxh;//(unsigned)(R*v)>>(32-B);
H[h][++H[h][0]]=v;
if(H[h][0]>20) printf("damn\n");
//nod *p=new nod;
//p->v=v;
//p->n=H[h];
// H[h]=p;
}
inline int find(int v)
{
int h=v%maxh;//(unsigned) (R*v)>>(32-B);
for(int i=1;i<=H[h][0];++i)
if(H[h][i]==v)return 1;
// for(nod *p=H[h]; p; p=p->n)
// if(p->v==v)return 1;
return 0;
}
int main()
{
getR();
// srand(time(0));
// R=(rand()<<1)|1;
printf("%d\n", R);
int n=1000000,i;
for(i=1;i<=n;++i) insert(rand()%1000000);
for(i=1;i<=n;++i) find(rand()%1000000);
return 0;
}