题目大意:给出一个Hash表的大小MSize(<10^4),以及N个数,用平方探查法(只考虑正增量)依次插入,输出这N个数所在的位置。如果MSize不是素数,则令它等于大于它的最小素数。
主要考察平方探查法。即,插入的元素位置为 (value + index * index) % MSize,index初值为0,如果不能插入,则令index自增,直到 index == MSize,说明无法插入,退出循环。
另外有个坑点是素数的判断中要加入1不是素数这一条,测试点 1即为MSize = 1的情形。
AC代码:
#include <vector>
#include <cstdio>
#include <cmath>
using namespace std;
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 main()
{
int MSize, N;
scanf("%d%d", &MSize, &N);
while(!isPrime(MSize)) MSize++;
vector<bool> hasNum(MSize, 0);
vector<int> position(N, -1);
for (int i = 0; i < N; ++i