题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592
AC代码
#include<bits/stdc++.h>
using namespace std;
int isPrime(int x)
{
if(x<=1) return 0;
else if(x==2) return 1;
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
int main()
{
int m,n,maxm;
cin>>m>>n;
while(isPrime(m)==0) m++;
int vis[m]={0};
for(int i=0;i<n;i++)
{
int t,t1,index;
cin>>t;
for(index=0;index<m;index++)
{
t1=(t+index*index)%m;
if(vis[t1]==0) break;
}
if(i!=0) cout<<" ";
if(index==m) cout<<"-";
else
{
vis[t1]=1;
cout<<t1;
}
}
}
注意
此题需要掌握平方探测法解决哈希冲突的原理和方法,并注意相应条件的判断即可