记得当初第一次做这道题的时候什么是平方探测法都不知道...
真不知道那时候怎么做的这道题.
#include <iostream>
#include <cmath>
#include <vector>
#include <cstring>
#include <climits>
using namespace std;
int M;
bool isPrime(int n){
if(n<=1){
return false;
}
for (int i = 2; i <=sqrt(n); ++i) {
if(n%i==0){
return false;
}
}
return true;
}
int insert(bool* used,int val){
for (int i = 0; i <=M/2; ++i) {
int index=(val+i*i)%M;
if(!used[index]){
used[index]=true;
return index;
}
}
return -1;
}
int main() {
int N;
cin>>M>>N;
while (!isPrime(M)){
M++;
}
vector<int > vector1;
bool used[M];
memset(used,false, sizeof(used));
for (int i = 0; i < N; ++i) {
int val;
cin>>val;
vector1.push_back(insert(used,val));
}
if(vector1[0]==-1){
cout<<'-';
} else{
cout<<vector1[0];
}
for (int j = 1; j < vector1.size(); ++j) {
if(vector1[j]==-1){
cout << " -" ;
} else {
cout << " " << vector1[j];
}
}
return 0;
}