1078 Hashing (25)
作者:互联网
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=10010;
int n,m;
int que[maxn]={0};
bool isprime(int n){
if(n<=1) return false;
if(n==2) return true;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return false;
}
return true;
}
int main(){
scanf("%d%d",&m,&n);
for(int i=m;i<maxn;i++){ //判断下一个质数并赋值给m
if(isprime(i)==true){
m=i;break;
}
}
int tmp;
// printf("%d\n",m);
for(int i=0;i<n;i++){
scanf("%d",&tmp);
int step=0;
bool isfind=false;
while(step<maxn){
int j=(tmp+step*step)%m;//用修正的m限制住j!
step++;
// printf("%d",j);
if(!que[j]){
isfind=true;
printf("%d",j);
que[j]=1;
break;
}
}
if(!isfind) printf("-");
if(i<n-1) printf(" ");
}
printf("\n");
return 0;
}
另外附上大神(薛玉洁)代码:
#include <iostream>
using namespace std;
bool isprime(int n){ //判断是否为素数
if(n<=1) return false;
if(n==2) return true;
for(int i=2;i<n;i++){
if(n%i==0) return false;
}
return true;
}
int main(){
int n,tsize,temp,s[10010]={0};
cin>>tsize>>n;
while(!isprime(tsize)) //找到最近的素数作为哈希表长度
tsize++;
for(int i=0;i<n;i++){
cin>>temp;
int j,k;
for(j=0;j<tsize;j++){
k=(temp+j*j)%tsize; //平方探测法
if(!s[k]){
s[k]=1;
cout<<k;
break;
}
}
if(j==tsize) cout<<"-"; //没有找到插入位置
if(i!=n-1) cout<<" ";
}
return 0;
}
标签:25,tsize,1078,int,namespace,bool,isprime,include,Hashing 来源: https://blog.csdn.net/qq_37150711/article/details/104721362