题目注意点
- 给出的Tsize如果不是素数要选一个大于它的最小的素数
- 产生冲突时需要使用平方探查法(只有正增量)
实现
#include <stdio.h>
#include <math.h>
const int maxn = 10010;
int mSize, n;
bool hashTable[maxn] = {0};
bool isPrime(int n) {
if (n <= 1) return false;
else {
int sqr = (int)sqrt(n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0) return false;
}
return true;
}
}
int main() {
scanf("%d%d", &mSize, &n);
while (!isPrime(mSize)) {
mSize++;
}
int a[maxn];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
if (!hashTable[a[i] % mSize]) {
printf("%d", a[i] % mSize);
hashTable[a[i] % mSize] = true;
} else {
int step;
for (step = 1; step <= mSize; step++) {
int index = (a[i] + step * step) % mSize;
if (!hashTable[index]) {
printf("%d", index);
hashTable[index] = true;
break;
}
}
if (step > mSize) printf("-");
}
if (i < n - 1) printf(" ");
}
printf("\n");
return 0;
}