Left factorials: Difference between revisions
Content added Content deleted
(+Java) |
(C solution addition.) |
||
Line 95: | Line 95: | ||
31678 |
31678 |
||
35656</pre> |
35656</pre> |
||
=={{header|C}}== |
|||
{{libheader|GMP}} |
|||
<lang C> |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
#include <gmp.h> |
|||
void mpz_left_fac_ui(mpz_t rop, unsigned long op) |
|||
{ |
|||
mpz_t t1; |
|||
mpz_init_set_ui(t1, 1); |
|||
mpz_set_ui(rop, 0); |
|||
size_t i; |
|||
for (i = 1; i <= op; ++i) { |
|||
mpz_add(rop, rop, t1); |
|||
mpz_mul_ui(t1, t1, i); |
|||
} |
|||
mpz_clear(t1); |
|||
} |
|||
size_t mpz_digitcount(mpz_t op) |
|||
{ |
|||
/* mpz_sizeinbase can not be trusted to give accurate base 10 length */ |
|||
char *t = mpz_get_str(NULL, 10, op); |
|||
size_t ret = strlen(t); |
|||
free(t); |
|||
return ret; |
|||
} |
|||
int main(void) |
|||
{ |
|||
mpz_t t; |
|||
mpz_init(t); |
|||
size_t i; |
|||
for (i = 0; i <= 110; ++i) { |
|||
if (i <= 10 || i % 10 == 0) { |
|||
mpz_left_fac_ui(t, i); |
|||
gmp_printf("!%u = %Zd\n", i, t); |
|||
} |
|||
} |
|||
for (i = 1000; i <= 10000; i += 1000) { |
|||
mpz_left_fac_ui(t, i); |
|||
printf("!%u has %u digits\n", i, mpz_digitcount(t)); |
|||
} |
|||
mpz_clear(t); |
|||
return 0; |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
!0 = 0 |
|||
!1 = 1 |
|||
!2 = 2 |
|||
!3 = 4 |
|||
!4 = 10 |
|||
!5 = 34 |
|||
!6 = 154 |
|||
!7 = 874 |
|||
!8 = 5914 |
|||
!9 = 46234 |
|||
!10 = 409114 |
|||
!20 = 128425485935180314 |
|||
!30 = 9157958657951075573395300940314 |
|||
!40 = 20935051082417771847631371547939998232420940314 |
|||
!50 = 620960027832821612639424806694551108812720525606160920420940314 |
|||
!60 = 141074930726669571000530822087000522211656242116439949000980378746128920420940314 |
|||
!70 = 173639511802987526699717162409282876065556519849603157850853034644815111221599509216528920420940314 |
|||
!80 = 906089587987695346534516804650290637694024830011956365184327674619752094289696314882008531991840922336528920420940314 |
|||
!90 = 16695570072624210767034167688394623360733515163575864136345910335924039962404869510225723072235842668787507993136908442336528920420940314 |
|||
!100 = 942786239765826579160595268206839381354754349601050974345395410407078230249590414458830117442618180732911203520208889371641659121356556442336528920420940314 |
|||
!110 = 145722981061585297004706728001906071948635199234860720988658042536179281328615541936083296163475394237524337422204397431927131629058103519228197429698252556442336528920420940314 |
|||
!1000 has 2565 digits |
|||
!2000 has 5733 digits |
|||
!3000 has 9128 digits |
|||
!4000 has 12670 digits |
|||
!5000 has 16322 digits |
|||
!6000 has 20062 digits |
|||
!7000 has 23875 digits |
|||
!8000 has 27749 digits |
|||
!9000 has 31678 digits |
|||
!10000 has 35656 digits |
|||
</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |