一个是素数的求解。还有一个就是hashing的冲突后再hash的算法。
把冲突后再hash的算法弄错了。。应该直接是h(x) = (key + i * i ) * tsize,(i= 0,1,2……)
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int Msize, n;
bool isPrime(int x) {
if (x <= 1)
return false;
for (int i = 2; i* i <= x; i++) {
if (x%i == 0)
return false;
}
return true;
}
bool isSet[20000];
int main() {
cin >> Msize >> n;
while (!isPrime(Msize))
Msize++;
memset(isSet, false, sizeof(isSet));
int temp;
vector <int> ans;
for (int i = 0; i < n; i++) {
cin >> temp;
int h = temp;
int j = 0;
for (j = 0; j < Msize; j++) {
h = (j*j + temp) % Msize;
if (!isSet[h]) {
isSet[h] = true;
cout << h;
break;
}
}
if (j == Msize)
cout << "-";
if (i == n - 1)
cout << endl;
else
cout << " ";
}
return 0;
}