拉链法
#include<iostream>
using namespace std;
const int N = 100003;
//N 设为1个质数
int h[N];
int e[N], ne[N], idx;
//y总的找质数
void f() {
for (int i = 100000;; i++)
{
bool flag = true;
for (int j = 2; j * j <= i; j++)
if (i % j == 0)
{
flag = false;
break;
}
if (flag)
{
cout << i << endl;
break;
}
}
}
void insert(int x)
{
//哈希值
int k = (x % N + N) % N;
e[idx] = x, ne[idx] = h[k], h[k] = idx++;
}
bool find(int x)
{
int k = (x % N + N) % N;
for (int i = h[k]; i != -1; i = ne[i])
if (e[i] == x)
return true;
return false;
}
int main() {
int n; cin >> n;
//空指针设置为-1;
memset(h, -1, sizeof(h));
while (n--) {
char op[2];
int x;
cin >> op >> x;
if (*op == 'I') insert(x);
else
{
if (find(x))puts("Yes");
else puts("No");
}
}
}
将负数的余数变为正数
和数学中不同 c++中余数可以是负数 -10/3=-3···-1
需要把余数变为正数 int k = (x % N + N) % N;