44 lines
814 B
Plaintext
44 lines
814 B
Plaintext
' FB 1.05.0 Win64
|
|
|
|
#include "gmp.bi"
|
|
|
|
Sub leftFactorial(rop As __mpz_struct, op As ULong)
|
|
Dim As __mpz_struct t1
|
|
mpz_init_set_ui(@t1, 1)
|
|
mpz_set_ui(@rop, 0)
|
|
For i As ULong = 1 To op
|
|
mpz_add(@rop, @rop, @t1)
|
|
mpz_mul_ui(@t1, @t1, i)
|
|
Next
|
|
mpz_clear(@t1)
|
|
End Sub
|
|
|
|
Function digitCount(op As __mpz_struct) As ULong
|
|
Dim As ZString Ptr t = mpz_get_str(0, 10, @op)
|
|
Dim As ULong ret = Len(*t)
|
|
Deallocate(t)
|
|
Return ret
|
|
End Function
|
|
|
|
Dim As __mpz_struct t
|
|
mpz_init(@t)
|
|
|
|
For i As ULong = 0 To 110
|
|
If i <= 10 OrElse i Mod 10 = 0 Then
|
|
leftFactorial(t, i)
|
|
gmp_printf(!"!%u = %Zd\n", i, @t)
|
|
End If
|
|
Next
|
|
|
|
Print
|
|
|
|
For i As ULong = 1000 To 10000 Step 1000
|
|
leftFactorial(t, i)
|
|
Print "!"; Str(i); " has "; digitCount(t); " digits"
|
|
Next
|
|
|
|
mpz_clear(@t)
|
|
Print
|
|
Print "Press any key to quit"
|
|
Sleep
|