#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define maxn 10010
bool pd(int n)
{
if(n<=1)
return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return false;
}
return true;
}
bool HashTable[maxn]={false};
int main()
{
int Tsize,n;
scanf("%d%d",&Tsize,&n);
while(pd(Tsize)==false)
{
Tsize++;
}
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);
int M;
M=a%Tsize;
if(HashTable[M]==false)
{
HashTable[M]=true;
if(i==0)
printf("%d",M);
else
printf(" %d",M);
}
else
{
int step;
for(step=1;step<Tsize;step++)
{
M=(a+step*step)%Tsize;
if(HashTable[M]==false)
{
HashTable[M]=true;
if(i==0)
printf("%d",M);
else
printf(" %d",M);
break;
}
}
if(step>=Tsize)
{
if(i>0)
printf(" ");
printf("-");
}
}
}
return 0;
}
一开始题目没看懂
还有就是二次方探查法不太懂
(a+step*step)%Tsize
step要从0到Tsize-1