Left factorials: Difference between revisions

Add Swift
m (used a bold font for showing the symbols for left factorial in the task's preamble.)
(Add Swift)
Line 3,232:
!10000 has 35656 digits.
</pre>
 
=={{header|Swift}}==
 
{{libheader|AttaSwift BigInt}}
 
<lang swift>import BigInt
 
func factorial<T: BinaryInteger>(_ n: T) -> T {
guard n != 0 else {
return 1
}
 
return stride(from: n, to: 0, by: -1).reduce(1, *)
}
 
prefix func ! <T: BinaryInteger>(n: T) -> T {
guard n != 0 else {
return 0
}
 
return stride(from: 0, to: n, by: 1).lazy.map(factorial).reduce(0, +)
}
 
for i in 0...10 {
print("!\(i) = \(!i)")
}
 
print()
 
for i in stride(from: BigInt(20), through: 110, by: 10) {
print("!\(i) = \(!i)")
}
 
print()
 
print("!1000 = \((!BigInt(1000)).description.count) digit number")
 
print()
 
for i in stride(from: BigInt(2000), through: 10_000, by: 1000) {
print("!\(i) = \((!i).description.count) digit number")
}</lang>
 
{{out}}
 
<pre style="overflow: scroll; height: 25em>!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 = 2565 digit number
 
!2000 = 5733 digit number
!3000 = 9128 digit number
!4000 = 12670 digit number
!5000 = 16322 digit number
!6000 = 20062 digit number
!7000 = 23875 digit number
!8000 = 27749 digit number
!9000 = 31678 digit number
!10000 = 35656 digit number</pre>
 
=={{header|Standard ML}}==
<lang sml>