思路
- 判断msize是否为质数,如果不是给出大于他的最小的质数。
- 如果n%msize这个坑已经被占满了,则找下一个坑n=n+i^2,直到i增加到m-1为止,如果还没有找到坑,则输出“-”。
我出错的一些点
- 1.是n加一个数,不是除数加,弄到我浪费了好久
- 2.我的天,1不是质数
代码
#include <iostream>
#include <string>
#include <vector>
#include<math.h>
using namespace std;
vector<int> a;
vector<bool> b;
void hash_(int n,int maxsize)
{
int m = 0;
while (m < maxsize)
{
int mp = (int)(n + pow(m, 2));
int np = mp % maxsize;
if (b[np])
{
m++;
}
else
{
b[np] = true;
cout << np;
break;
}
}
if (m == maxsize)
cout << "-";
}
bool isP(int n)
{
if (n == 1)
return false;
for (int i = 2; i <= sqrt(n); i++)
{
if (n%i == 0)
{
return false;
}
}
return true;
}
int isPrim(int &n)
{
if (isP(n))
{
return n;
}
else
{
int i = n + 1;
for (;; i++)
{
if (isP(i))
break;
}
return i;
}
}
int main(int argc, char** argv)
{
int msize, n;
cin >> msize>>n;
for (int i = 0; i < n; i++)
{
int k;
cin >> k;
a.push_back(k);
}
msize = isPrim(msize);
b.resize(msize,false);
for (int i = 0; i < a.size(); i++)
{
if (i==0)
hash_(a[i], msize);
else if (i < a.size())
{
cout << " ";
hash_(a[i], msize);
}
}
cout << endl;
return 0;
}