Left factorials: Difference between revisions
→Vectorization solution: Overhauled and added output.
ReeceGoding (talk | contribs) (→Vectorization solution: Overhauled and added output.) |
|||
Line 2,905:
Due to vectorization, these sorts of problems are R's bread and butter. The only challenge comes from making sure that R plays nice with objects from the gmp library.
<lang r>library(gmp)
{
#As we will never actually use the numeric values of our outputs,
#we will immediately coerce them to characters. For technical
#much easier.
sapply(numbs, function(n) as.character(if(n==0) 0 else sum(factorialZ(0:(n-1)))))
}
printer <- function(inputs) print(data.frame(Value = leftFact(inputs), row.names = paste0("!", inputs)))
#Task 1
#Task 2
#Task 3
inputs<-seq(1000, 10000, by = 1000)
print(data.frame(Digits = sapply(leftFact(inputs), nchar), row.names = paste0("!", inputs)))</lang>
▲#If we really wanted to take care with nchar misbehaving, we could have used format.
{{out}}
<pre>> printer(0:10)
Value
!0 0
!1 1
!2 2
!3 4
!4 10
!5 34
!6 154
!7 874
!8 5914
!9 46234
!10 409114
> printer(seq(20, 110, by = 10))
Value
!20 128425485935180314
!30 9157958657951075573395300940314
!40 20935051082417771847631371547939998232420940314
!50 620960027832821612639424806694551108812720525606160920420940314
!60 141074930726669571000530822087000522211656242116439949000980378746128920420940314
!70 173639511802987526699717162409282876065556519849603157850853034644815111221599509216528920420940314
!80 906089587987695346534516804650290637694024830011956365184327674619752094289696314882008531991840922336528920420940314
!90 16695570072624210767034167688394623360733515163575864136345910335924039962404869510225723072235842668787507993136908442336528920420940314
!100 942786239765826579160595268206839381354754349601050974345395410407078230249590414458830117442618180732911203520208889371641659121356556442336528920420940314
!110 145722981061585297004706728001906071948635199234860720988658042536179281328615541936083296163475394237524337422204397431927131629058103519228197429698252556442336528920420940314
print(data.frame(Digits = sapply(leftFact(inputs), nchar), row.names = paste0("!", inputs)))
Digits
!1000 2565
!2000 5733
!3000 9128
!4000 12670
!5000 16322
!6000 20062
!7000 23875
!8000 27749
!9000 31678
!10000 35656</pre>
=={{header|Racket}}==
|