//二次探测,只考虑正向探测
//注意10001、10003都是非质数,直到10007才是质数
#include<math.h>
#include<iostream>
using namespace std;
int msize, nsize;
int table[10007] = { 0 };
bool first = true;
bool isprime(int n){
if (n == 1){ return 0; }
double m = sqrt(n);
for (int i = 2; i <= m; i++){
if (!(n%i)) return 0;
}
return 1;
}
void push(int num){
for (int i = 0; i < msize; i++){
int k = (num + i*i) % msize;
if (!table[k]){
table[k] = 1;
cout << k; return;
}
}
cout << "-"; return;
}
int main(){
cin >> msize >> nsize;
while (!isprime(msize++));
msize--;//找到符合条件的最小质数
for (int i = 0; i < nsize; i++){
int tmp;
cin >> tmp;
if(!first)
cout<<" ";
else
first=false;
push(tmp);
}
}
PAT 1078. Hashing (25)
最新推荐文章于 2021-02-01 11:48:07 发布