此前也没听说过二次探测法,,,看到“Quadratic probing”也不知道是二次探测法。其实公式倒是简单的,见码即知。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int m,n,siz;
bool check(int x){
if(x<=1)return false;
int i;
for(i=2;i*i<=x;i++)
if(x%i==0)return false;
return true;
}
const int N=100005;
bool used[N];
int main(){
memset(used,0,sizeof(used));
scanf("%d%d",&m,&n);
while(!check(m))m++;
int inpu,i,tmp;
while(n--){
scanf("%d",&inpu);
for(i=0;i<m;i++){//这个循环就是二次探测法的探测过程
tmp=(inpu+i*i)%m;
if(!used[tmp]){
used[tmp]=true;
printf("%d",tmp);
break;
}
}
if(i>=m)printf("-");
if(n>0)printf(" ");
else printf("\n");
}
return 0;
}