From 5a44eb260b9b35096df7371a702ba99b7265b3f9 Mon Sep 17 00:00:00 2001 From: Raphael McSinyx Date: Wed, 15 Feb 2017 11:33:54 +0700 Subject: Update others/volume1 --- others/volume1/clib.pas | 259 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 others/volume1/clib.pas (limited to 'others/volume1/clib.pas') diff --git a/others/volume1/clib.pas b/others/volume1/clib.pas new file mode 100644 index 0000000..28dffb2 --- /dev/null +++ b/others/volume1/clib.pas @@ -0,0 +1,259 @@ +(* Common library *) +unit clib; + +interface + + type + intar = array of int64; + + const + factorial: array[1..20] of uint64 = ( + 1, + 2, + 6, + 24, + 120, + 720, + 5040, + 40320, + 362880, + 3628800, + 39916800, + 479001600, + 6227020800, + 87178291200, + 1307674368000, + 20922789888000, + 355687428096000, + 6402373705728000, + 121645100408832000, + 2432902008176640000 + ); + fibonacci: array[1..93] of uint64 = ( + 1, + 1, + 2, + 3, + 5, + 8, + 13, + 21, + 34, + 55, + 89, + 144, + 233, + 377, + 610, + 987, + 1597, + 2584, + 4181, + 6765, + 10946, + 17711, + 28657, + 46368, + 75025, + 121393, + 196418, + 317811, + 514229, + 832040, + 1346269, + 2178309, + 3524578, + 5702887, + 9227465, + 14930352, + 24157817, + 39088169, + 63245986, + 102334155, + 165580141, + 267914296, + 433494437, + 701408733, + 1134903170, + 1836311903, + 2971215073, + 4807526976, + 7778742049, + 12586269025, + 20365011074, + 32951280099, + 53316291173, + 86267571272, + 139583862445, + 225851433717, + 365435296162, + 591286729879, + 956722026041, + 1548008755920, + 2504730781961, + 4052739537881, + 6557470319842, + 10610209857723, + 17167680177565, + 27777890035288, + 44945570212853, + 72723460248141, + 117669030460994, + 190392490709135, + 308061521170129, + 498454011879264, + 806515533049393, + 1304969544928657, + 2111485077978050, + 3416454622906707, + 5527939700884757, + 8944394323791464, + 14472334024676221, + 23416728348467685, + 37889062373143906, + 61305790721611591, + 99194853094755497, + 160500643816367088, + 259695496911122585, + 420196140727489673, + 679891637638612258, + 1100087778366101931, + 1779979416004714189, + 2880067194370816120, + 4660046610375530309, + 7540113804746346429, + 12200160415121876738 + ); + + procedure qsort(var a : intar); + function gcd(x, y: int64): int64; + function isprime(x: int64): boolean; + function issquare(x: int64): boolean; + function ispalindrome(s: ansistring): boolean; + function all(b: array of boolean): boolean; + function binin( + a: intar; + x: int64 + ): boolean; + + +implementation + + procedure qsort(var a : intar); + procedure sort(l, r: int64); + var + i, j, x, y: int64; + + begin + i := l; + j := r; + x := a[(l + r) div 2]; + + repeat + while a[i] < x do + i := i + 1; + while x < a[j] do + j := j - 1; + + if i <= j then + begin + y := a[i]; + a[i] := a[j]; + a[j] := y; + i := i + 1; + j := j - 1 + end + until i > j; + + if l < j then + sort(l, j); + if i < r then + sort(i, r) + end; + + begin + sort(0, length(a) - 1) + end; + + + function gcd(x, y: int64): int64; + var z: int64; + begin + while y > 0 do + begin + z := y; + y := x mod y; + x := z + end; + gcd := x + end; + + + function isprime(x: int64): boolean; + var i: int32; + begin + if x < 2 then + exit(false); + for i := 2 to trunc(sqrt(x)) do + if x mod i = 0 then + exit(false); + isprime := true + end; + + + function issquare(x: int64): boolean; + begin + issquare := (x >= 0) and (sqr(trunc(sqrt(x))) = x) + end; + + + function ispalindrome(s: ansistring): boolean; + var + n, i: int32; + begin + n := length(s); + for i := 1 to n div 2 do + if s[i] <> s[n - i + 1] then + exit(false); + ispalindrome := true + end; + + + function all(b: array of boolean): boolean; + var + i: boolean; + begin + for i in b do + if not i then + exit(false); + all := true + end; + + + function binin( + a: intar; + x: int64 + ): boolean; + + var + l, h, mid: uint64; + + begin + l := 0; + h := length(a) - 1; + + while l <= h do + begin + mid := (l + h) div 2; + if x = a[mid] then + exit(true) + else if x < a[mid] then + h := mid - 1 + else + l := mid + 1 + end; + + binin := false + end; + +end. -- cgit 1.4.1