注意判定是否为素数时应该是小于等于,这个地方容易出错
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=10100;
bool isP(int n)
{
int a=(int)sqrt(1.0*n);
if(n<=1)
return false;
else
{
for (int i=2;i<=a;i++)
{
if(n%i==0)
return false;
}
}
return true;
}
int main()
{
int n,m,Tsize,a,hashTable[maxn]={0};
cin>>n>>m;
while (isP(n)==false)
{
n++;
}
Tsize=n;
for(int i=0;i<m;i++)
{
scanf("%d",&a);
int temp=a%Tsize;
if(hashTable[temp]==0)
{
printf("%d",temp);
hashTable[temp]++;
}
else
{
int j;
for (j=1;j<Tsize;j++)
{
temp=(a+j*j)%Tsize;
if(hashTable[temp]==0)
{
printf("%d",temp);
hashTable[temp]++;
break;
}
}
if(j==Tsize)
{
printf("-");
}
}
if(i!=m-1)
printf(" ");
}
}