Pagini recente » Cod sursa (job #55950) | Cod sursa (job #630355) | Cod sursa (job #2564689) | Cod sursa (job #2496411) | Cod sursa (job #678584)
Cod sursa(job #678584)
#include <fstream>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
#define M 1101011
int A[M], N, B[M], pr[100];
void eratostene(int n)
{
int nr=0, i, j;
for (i=2; i<n; i++) pr[i] = 1;
for (i=2; i*i<n; i++)
if (pr[i])
for (j=i+i; j<n; j+=i) pr[j] = 0;
for (i=2; i<n; i++)
if (pr[i]) pr[nr++] = i;
}
int H(int x, int p)
{
return ((x%M)*p)%M;
}
void insereaza(int x)
{
int p=0;
while (A[H(x,pr[p])] && A[H(x,pr[p])]!=x) p++;
//g << "Nivel : " << pr[p] << '\n';
A[H(x,pr[p])] = x;
B[H(x,pr[p])] = 0;
}
void sterge(int x)
{
int p=0;
while ((A[H(x,pr[p])] || B[H(x,pr[p])]) && A[H(x,pr[p])]!=x) p++;
A[H(x,pr[p])] = 0;
B[H(x,pr[p])] = 1;
}
bool cauta(int x)
{
int p=0;
while ((A[H(x,pr[p])] || B[H(x,pr[p])]) && A[H(x,pr[p])]!=x) p++;
return A[H(x,pr[p])] == x;
}
int main()
{
eratostene(100);
int c,x;
f >> N;
for (;N--;){
f >> c >> x;
if (c==1) insereaza(x); else
if (c==2) sterge(x); else
if (c==3) g << cauta(x) << '\n';
}
return 0;
}