void firstCase(){
	mpf_t a,b,c;

	mpf_inits(a,b,c,NULL);

	mpf_set_str(a,,10);
	mpf_set_str(b,,10);
	mpf_add(c,a,b);

	gmp_printf(,20,c);
}

void pathologicalSeries(){
	int n;
	mpf_t v1, v2, vn, a1, a2, a3, t2, t3, prod;

	mpf_inits(v1,v2,vn, a1, a2, a3, t2, t3, prod,NULL);

	mpf_set_str(v1,,10);
	mpf_set_str(v2,,10);
	mpf_set_str(a1,,10);
	mpf_set_str(a2,,10);
	mpf_set_str(a3,,10);

	for(n=3;n<=100;n++){
		mpf_div(t2,a2,v2);
		mpf_mul(prod,v1,v2);
		mpf_div(t3,a3,prod);
		mpf_add(vn,a1,t3);
		mpf_sub(vn,vn,t2);

		if((n>=3&&n<=8) || n==20 || n==30 || n==50 || n==100){
			gmp_printf(,n,(n==3)?1:(n>=4&&n<=7)?6:(n==8)?7:(n==20)?16:(n==30)?24:(n==50)?40:78,vn);
		}

		mpf_set(v1,v2);
		mpf_set(v2,vn);
	}
}

void healthySeries(){
	int n;

	mpf_t num,denom,result;
	mpq_t v1, v2, vn, a1, a2, a3, t2, t3, prod;

	mpf_inits(num,denom,result,NULL);
	mpq_inits(v1,v2,vn, a1, a2, a3, t2, t3, prod,NULL);

	mpq_set_str(v1,,10);
	mpq_set_str(v2,,10);
	mpq_set_str(a1,,10);
	mpq_set_str(a2,,10);
	mpq_set_str(a3,,10);

	for(n=3;n<=100;n++){
		mpq_div(t2,a2,v2);
		mpq_mul(prod,v1,v2);
		mpq_div(t3,a3,prod);
		mpq_add(vn,a1,t3);
		mpq_sub(vn,vn,t2);

		if((n>=3&&n<=8) || n==20 || n==30 || n==50 || n==100){
			mpf_set_z(num,mpq_numref(vn));
			mpf_set_z(denom,mpq_denref(vn));
			mpf_div(result,num,denom);

			gmp_printf(,n,(n==3)?1:(n>=4&&n<=7)?6:(n==8)?7:(n==20)?16:(n==30)?24:(n==50)?40:78,result);
		}

		mpq_set(v1,v2);
		mpq_set(v2,vn);
	}
}

int main()
{	
	mpz_t rangeProd;

	firstCase();

	printf();

	pathologicalSeries();

	printf();

	healthySeries();

	return 0;
}