#include <stdio.h>
#include <math.h>

#define SIZE_ARRAY 10001

bool esPrimo(int eval, int *primosConocidos);
bool esPar(int eval);

int *lastAddr = 0;

int main(int argc, char const *argv[])
{
	int arrayPrime[SIZE_ARRAY] = { 0 };
	int counter;

	bool valido;

	//Agregando valores conocidos
	arrayPrime[0] = 2;
	arrayPrime[1] = 3;

	//Init
	counter = 3;
	do
	{
		counter+=2;
		valido = esPrimo(counter, arrayPrime);

	} while (arrayPrime[SIZE_ARRAY-1] == 0);

	printf("El primo #%d es:\t%d\n", SIZE_ARRAY, arrayPrime[SIZE_ARRAY-1]);

	return 0;
}


bool esPrimo(int eval, int *primosConocidos)
{
	bool valido = true;
	double res = 0;

	res = sqrt(eval);
	while(*primosConocidos != 0)
	{
		if((double) *primosConocidos <= res)
		{
			if ( eval % *primosConocidos == 0 )
			{
				valido = false;
				break;
			}
			else
			{
				primosConocidos++;
			}
		}
		else
		{

			lastAddr = (lastAddr == 0) ? ++primosConocidos : lastAddr + 1;

			primosConocidos = lastAddr;
			*primosConocidos = eval;
			valido = true;
			break;
		}

	}

	return valido;
}

bool esPar(int eval) { return eval % 2 == 0; }
