1078. Hashing (25)

#include <iostream>
#include <math.h>

using namespace std;

int flag[10010];

int judge(int n)
{
	if(n == 1)
	{
		return 0;
	}

	int r = sqrt(n * 1.0), i;
	for(i = 2; i <= r; i++)
	{
		if(n % i == 0)
		{
			return 0;
		}
	}

	return 1;
}

int main()
{
	int msize, n;
	scanf("%d%d", &msize, &n);

	while(judge(msize) == 0)
	{
		msize++;
	}

	int i, j, base, num, r = msize / 2, index, first = 1;
	for(i = 1; i <= n; i++)
	{
		scanf("%d", &num);

		base = num % msize;
		for(j = 0; j <= r; j++)
		{
			index = (base + j * j) % msize;
			if(flag[index] == 0)
			{
				flag[index] = 1;
				break;
			}
		}

		if(first == 1)
		{
			first = 0;
		}
		else
		{
			printf(" ");
		}

		if(j > r)
		{
			printf("-");
		}
		else
		{
			printf("%d", index);
		}
	}

	printf("\n");

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:17  王景迁  阅读(3)  评论(0)    收藏  举报

导航