diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:21:45 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:35:09 +0200 |
| commit | 95341b61b030c9e1290f3b326cb7ec584f543aea (patch) | |
| tree | 852386fa04d32eb859bca11c0eff7b5ef9e50f00 /065.c | |
| parent | 571164d977f91925c4c76a292f74f5f93d09ae23 (diff) | |
Diffstat (limited to '065.c')
| -rw-r--r-- | 065.c | 40 |
1 files changed, 40 insertions, 0 deletions
@@ -0,0 +1,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; +} + |
