1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include <gmp.h>
#include <stdio.h>
#define limit 100
unsigned int start = 2;
unsigned int factors[limit-1];
int main(void)
{
int pos, k=1, sum;
mpz_t numerator, denominator;
for(pos=0; pos<limit-1; pos++)
{
if(pos % 3 == 1)
factors[pos] = 2*(k++);
else
factors[pos] = 1;
}
mpz_init_set_ui(numerator, 1);
mpz_init_set_ui(denominator, factors[limit-2]);
for(pos=limit-3; pos>=0; pos--)
{
mpz_addmul_ui(numerator, denominator, factors[pos]); // numerator += denominator * factors[pos]
mpz_swap(numerator, denominator);
}
mpz_addmul_ui(numerator, denominator, start); // numerator += denominator * start
sum = 0;
while(mpz_cmp_ui(numerator, 0) > 0)
sum += mpz_fdiv_q_ui(numerator, numerator, 10);
printf("%li\n", sum);
return 0;
}
|