PAT (Advanced Level) 1078. Hashing (25)

时间:2022-09-10 00:01:56

二次探测法。表示第一次听说这东西。。。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<algorithm>
using namespace std; const int maxn=;
bool flag[maxn];
long long m,n; bool prime(long long x)
{
if(x==) return ;
if(x==) return ;
for(long long i=;i*i<=x;i++)
if(x%i==) return ;
return ;
} int main()
{
memset(flag,,sizeof flag);
scanf("%lld%lld",&m,&n); while()
{
if(prime(m)) break;
m++;
} for(long long i=;i<=n;i++)
{
long long num; scanf("%lld",&num); int p=-;
for(long long j=;j<m;j++){ if(flag[(num+j*j)%m]==)
{
flag[(num+j*j)%m]=;
p=(num+j*j)%m; break;
}
}
if(p==-) printf("-");
else printf("%d",p); if(i<n) printf(" ");
else printf("\n");
}
return ;
}