这道题牵扯到了hash散列中的集中查询方式,随后做一个总结,对于素数方面,没有神马难度;
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
using std::vector;
const int maxn=10010;
bool vis[maxn]={false};
bool isPrime(int x){
if(x<=1)
return false;
int sqr=sqrt(x*1.0);
for(int i=2;i<=sqr;i++){
if(x%i==0)
return false;
}
return true;
}
int main(){
vector<char> v;
int m,n;
int num;
scanf("%d%d",&m,&n);
while(!isPrime(m)){
m++;
}
for(int i=0;i<n;i++){
scanf("%d",&num);
int M=num%m;
if(!vis[M]){
vis[M]=true;
if(i==0)
printf("%d",M);
else
printf(" %d",M);
}else{
int step;
for(step=1;step<m;step++){
M=(num+step*step)%m;
if(!vis[M]){
vis[M]=true;
if(i==0)
printf("%d",M);
else
printf(" %d",M);
break;
}
}
if(step>=m){
if(i>0)
printf(" ");
printf("-");
}
}
}
for(int i=0;i<v.size();i++){
if(i==0)
printf("%c",v[i]);
else
printf(" %c",v[i]);
}
system("pause");
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。