# PAT 甲级 1078 Hashing (25 分)（简单，平方二次探测）

1078 Hashing (25 分)

The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be ( where

Note that the table size is better to be prime. If the maximum size given by the user is not prime, you must re-define the table size to be the smallest prime number which is larger than the size given by the user.

### Input Specification:

Each input file contains one test case. For each case, the first line contains two positive numbers:

### Output Specification:

For each test case, print the corresponding positions (index starts from 0) of the input numbers in one line. All the numbers in a line are separated by a space, and there must be no extra space at the end of the line. In case it is impossible to insert the number, print "-" instead.

### Sample Input:

4 4
10 6 4 15


### Sample Output:

0 1 4 -

$h(i)=(h(key)+i�i)mod(M)%uFF0C0%u2264i%u2264M%u22121$

其中，h是哈希寻址函数，key是要存储的值，M是哈希表的大小，一般使用素数可以达到一个较高的效率。

AC代码 ：

#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[20005];
bool prime(int x){
if(x<=1) return false;
for(int i=2;i*i<=x;i++){
if(x%i==0) return false;
}
return true;
}
int main(){
cin>>m>>n;
for(int i=0;i<20000;i++) a[i]=-1;
while(!prime(m)) m++;
int x;
for(int i=1;i<=n;i++){
cin>>x;
int f=0;
for(int j=0;j<m;j++){
int y=(x+j*j)%m;//平方探测
if(a[y]==-1 || a[y]==x){
cout<<y;
a[y]=x;
f=1;
break;
}
}
if(!f) cout<<"-";
if(i!=n) cout<<" ";
}
return 0;
}

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客