Exemple #1
0
		void EliminaSecuencia( SecuenciaEnteros elimina ){
			int long_elimina = elimina.Utilizados();
			int pos_escritura = 0;

			bool esta = false;

			// Recorremos los números de este vector.
			for(int i = 0; i < total_utilizados; i++){

				for(int j = 0; j < long_elimina && !esta; j++){

					if( Elemento(i) == elimina.Elemento(j)){
						esta = true;
					}

				}

				// Si está lo borramos.
				if( !esta ){
					Modifica( pos_escritura, Elemento(i) );
					pos_escritura++;
				}
				else{
					esta = false;
				}

			}

			total_utilizados = pos_escritura;
		}
Exemple #2
0
		uint64_t Combinatorio( int a, int b){
			uint64_t combinatorio;
			SecuenciaEnteros simplificador;
			int resta = a - b;
			int numero_primero,
				 numero_segundo;
			bool mayor = resta > b;
			bool simplificado = false;

			EliminaTodos();

			AniadeFactorial(a);

			// Nos quedamos con la secuencia más larga.
			if( mayor ){
				simplificador.AniadeFactorial(resta);
			}
			else{
				simplificador.AniadeFactorial(b);
			}
			// Simplificamos
			EliminaSecuencia(simplificador);

			// Actualizamos
			simplificador.EliminaTodos();
			if( mayor ){
				simplificador.AniadeFactorial(b);
			}
			else{
				simplificador.AniadeFactorial(resta);
			}

			// Simplificamos los factores
			/*
			 * Recorremos los elementos del denominador y buscamos factores.
			 */

			for(int i = 0; i < simplificador.Utilizados() ; i++){
				numero_primero = simplificador.Elemento(i);
				for(int j = numero_primero; j >= 2; j--){

					if( numero_primero % j == 0 ){

						for(int k = 0; k < total_utilizados && !simplificado; k++){
							numero_segundo = Elemento(k);

							if( numero_segundo % j == 0 ){
								numero_primero = numero_primero / j;
								numero_segundo = numero_segundo / j;

								simplificador.Modifica(i, numero_primero);
								Modifica(k, numero_segundo);
								simplificado = true;
							}

						}

						simplificado = false;

					}

				}
			}

			numero_primero = Factorial();
			numero_segundo = simplificador.Factorial();

			// Calculamos
			combinatorio = Factorial() / simplificador.Factorial();

			return combinatorio;
		}