1078 Hashing

给出散列表长度以及插入的元素,问插入位置。
重点在于判断是否为素数(保证散列表长度为素数),以及二次探测法(寻找元素插入位置)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;

int m, n, hashTable[10010];

bool isPrime (int num) {
if (num == 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num %i == 0) return false;
}
return true;
}

void insert(int key) {
for (int step = 0; step < m; step++) {
int index = (key + step * step) % m;
if (hashTable[index] == 0) {
hashTable[index] = 1;
cout << index;
return;
}
}
cout << "-";
}

int main() {
cin >> m >> n;
while (!isPrime(m)) m++;
for (int i = 0; i < n; i++) {
int key;
cin >> key;
if (i != 0) cout << " ";
insert(key);
}

return 0;
}