All pastes #1912501 Raw Edit

Anonymous

public text v1 · immutable
#1912501 ·published 2010-08-06 22:08 UTC
rendered paste body
#include <stdio.h>
#include <math.h>
#include <assert.h>

#define LIMIT 50000

int primosmenores(unsigned int numero, unsigned int primos[]);
int esprimo(unsigned int numero);
int factorizar(unsigned int numero, unsigned int factores[]);

void main()
{
	int i, ii, cantdivisores, cantprimos;
	unsigned int numero, factores[LIMIT];

//	cantprimos = factorizar(7320,factores);

	numero = 0; 

	for (i = 1; cantdivisores != 500; i++)
	{
		for (ii = 0; ii < LIMIT; ii++)
		{
			factores[ii] = 0;
		}

		cantdivisores = 1;

		numero += i;


		printf("El numero %d es el %d numero triangulo\n", numero,i);

		cantprimos = factorizar(numero,factores);
		for (ii = 0; ii < cantprimos; ii++)
		{
			while ((factores[ii] == 0) && (ii < cantprimos))
			{
				ii++;
			}

//			printf("El factor numero %d es %d\n",i,factores[i]);

			cantdivisores = cantdivisores*(factores[ii]+1);
		}

		printf("El numero %d tiene %d divisores\n", numero, cantdivisores);
	}

	printf("El numero es %d\n", numero);

}

int primosmenores(unsigned int numero, unsigned int primos[])
{
	int i, ii;

	for (i = 0; i < LIMIT; i++)
	{
		primos[i] = 0;
	}

	for ((i = 1) && (ii = 0); i <= (numero/2); i++)
	{
		if (esprimo(i) == 1)
		{
			primos[ii] = i;
			ii++;
		}
	}

	return ii;
}

int esprimo(unsigned int numero)
{
        int r,f;

        if (numero == 1)
        {
                return 0;
        }
        else if (numero < 4)
        {
                return 1;
        }
        else if ((numero % 2) == 0)
        {
                return 0;
        }
        else if (numero < 9)
        {
                return 1;
        }
        else if ((numero % 3) == 0)
        {
                return 0;
        }
        else
        {
                r = floor(sqrt(numero));
                f = 5;

                while (f <= r)
                {
                        if ((numero % f) == 0)
                        {
                                return 0;
                        }
                        if ((numero % (f+2) == 0))
                        {
                                return 0;
                        }

                        f += 6;
                }

                return 1;
        }
}

int factorizar(unsigned int numero, unsigned int factores[])
{
        int i, ii, primes[LIMIT], cantprimos;

	cantprimos = primosmenores(numero,primes);

/*	for (i = 0; i < cantprimos; i++)
	{
		printf("%d es primo.\n", primes[i]);
	}
*///	printf("Hay %d primos\n",cantprimos);

//	printf("We're going in\n");

        for (i = 0; i < cantprimos; ++i)
	{
//		printf("We're in!\n");
		while ((numero != 1) && ((numero % primes[i]) == 0))
		{
//			printf("Estamos en el while con %d y %d\n",primes[i],numero);
			numero = numero / primes[i];
//			printf("Numero ahora vale %d\n",numero);
			factores[i+1] += 1;
		}
//		printf("Salimos del while!\n");
	}

/*	for (i = 0; i < cantprimos; ++i)
	{
		printf("%d ", factores[i]);
	}
*/
	return cantprimos;
}