tstP07.cpp 1.52 KB
#include <stdio.h>
#include <math.h>

#define SIZE_ARRAY 1000000

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

int contadorPrimos = 0;

int main(int argc, char const *argv[])
{

	int *ptrPrime;
	int arrayPrime[SIZE_ARRAY] = { 0 };
	int counter;
	int counterTmp=0;


	bool valido;

	counter = 1;

	do
	{
		if (counter <= 2)
			counter++;
		else
			counter+=2;

		valido = esPrimo(counter, arrayPrime);


		if(counterTmp != contadorPrimos && contadorPrimos % 100000 == 0)
		{
			counterTmp = contadorPrimos;
			printf("%d\t-\t%d\n", counter, contadorPrimos);
		}


	} 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;

	if(eval == 2)
	{
		//printf("Test: 2\n");
		*primosConocidos = 2;
		valido = true;
	}
	/*
	else if(esPar(eval))
	{
		//printf("Test: par\n");
		valido = false;
	}
	*/
	else
	{
		//printf("Test: SQRT\n");
		res = sqrt(eval);
		while(*primosConocidos != 0)
		{
			if((double) *primosConocidos <= res)
			{
				//printf("Test: raiz menor\n");
				valido = (eval % *primosConocidos != 0);
			}
			else
			{
				//printf("Test: raiz mayor\n");

				while(*primosConocidos != 0) {
				    primosConocidos++;
				}

				//printf("%d\t", eval);
				contadorPrimos++;
				*primosConocidos = eval;
				valido = true;
				break;
			}

			if (!valido) break;

			primosConocidos++;

		}

	}

	return valido;
}

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