第一次没有做碰撞检测,导致测点1和3答案错误
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
bool primes[10010];
bool hashTable[10010];
int main(){
fill(primes,primes + 10010,true);
primes[1] = false;
fill(hashTable,hashTable + 10010,false);
for(int i = 2;i < 10010;i++){
if(primes[i] == true){
for(int j = 2;j * i < 10010;j++){
primes[j * i] = false;
}
}
}
int size,n;
scanf("%d %d",&size,&n);
while(primes[size] == false){
size++;
}
for(int i = 0;i < n;i++){
int num;
scanf("%d",&num);
int j = 1;
if(i < n - 1){
while(hashTable[num % size]){
num = (num + j * j - (j - 1) * (j - 1)) % size;
j++;
if(j > 10010){
printf("- ");
break;
}
}
if(!hashTable[num % size]){
printf("%d ",num % size);
hashTable[num % size] = true;
}
}else{
while(hashTable[num % size]){
num = (num + j * j - (j - 1) * (j - 1)) % size;
j++;
if(j > 10010){
printf("-");
break;
}
}
if(!hashTable[num % size]){
printf("%d",num % size);
hashTable[num % size] = true;
}
}
}
system("pause");
return 0;
}