#include <stdio.h>
#include <stdlib.h>

unsigned int lea_lea (const char *k, int keylen)
{
	unsigned int mult1 = 3;
	unsigned int mult2 = 5;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int lea_leaadd (const char *k, int keylen)
{
	unsigned int mult1 = 5;
	unsigned int mult2 = 7;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int lea_shiftadd (const char *k, int keylen)
{
	unsigned int mult1 = 3;
	unsigned int mult2 = 17;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int leaadd_shiftadd (const char *k, int keylen)
{
	unsigned int mult1 = 7;
	unsigned int mult2 = 31	;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int shiftadd_shiftadd (const char *k, int keylen)
{
	unsigned int mult1 = 31;
	unsigned int mult2 = 127;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int lealea_lealea (const char *k, int keylen)
{
	unsigned int mult1 = 11;
	unsigned int mult2 = 13;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

unsigned int shiftadd_imul (const char *k, int keylen)
{
	unsigned int mult1 = 31;
	unsigned int mult2 = 411;
	unsigned int a = 0;
	unsigned int b = 0;

	while (keylen--)
	{
		unsigned char c = *k++;

		a = a * mult1 + c;
		b = b * mult2 + c;
	}
	return a+b;
}

