三个注意点
- Quadratic probing (with positive increments only) is used to solve the collisions.正向二次探测法处理冲突 quadratic 平方,二次 probing 探测 increment 增加,增长 collision 冲突
- 散列相关知识掌握的还是不够牢固,散列表直接以某个数x为下标,1代表未占用,0代表已占用
- 书上的埃氏筛法代码有缺陷,1不是素数,而书上给的代码对此显示有误。耽误了劳资好长时间!!!
#include<iostream>
using namespace std;
typedef long long ll;
const ll maxn=1000010;
int hashtable[maxn]={0};
int key,m,n;
int isprime(int a)
{
if(a<=1)return 0;
int b[a+1]={0};
for(int i=2;i<a;i++)
{
if(b[i]==0)
for(int j=i+i;j<=a;j+=i)
b[j]=1;
}
return b[a]==0?1:0;
}
void insert(int a)
{
int d=a%m;
int e=a%m;
for(int step=1;step<m;step++)
{
if(hashtable[d]==0)
{
hashtable[d]=1;
cout<<d%m;
return ;
}
else
d=(e+step*step)%m;
}
cout<<"-";
}
int main()
{
cin>>m>>n;
while(!isprime(m))m++;
for(int i=0;i<n;i++)
{
cin>>key;
if(i!=0)cout<<" ";
insert(key);
}
}```