Data update
This commit is contained in:
parent
ed705008a8
commit
0df55f9f24
2196 changed files with 32999 additions and 3075 deletions
|
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
using System.Numerics;
|
||||
|
||||
class CombinationsAndPermutations
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine(double.MaxValue);
|
||||
Console.WriteLine("A sample of permutations from 1 to 12 with exact Integer arithmetic:");
|
||||
for (int n = 1; n <= 12; n++)
|
||||
{
|
||||
int k = n / 2;
|
||||
Console.WriteLine($"{n} P {k} = {Permutation(n, k)}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("A sample of combinations from 10 to 60 with exact Integer arithmetic:");
|
||||
for (int n = 10; n <= 60; n += 5)
|
||||
{
|
||||
int k = n / 2;
|
||||
Console.WriteLine($"{n} C {k} = {Combination(n, k)}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("A sample of permutations from 5 to 15000 displayed in floating point arithmetic:");
|
||||
Console.WriteLine($"{5} P {2} = {Display(Permutation(5, 2), 50)}");
|
||||
for (int n = 1000; n <= 15000; n += 1000)
|
||||
{
|
||||
int k = n / 2;
|
||||
Console.WriteLine($"{n} P {k} = {Display(Permutation(n, k), 50)}");
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("A sample of combinations from 100 to 1000 displayed in floating point arithmetic:");
|
||||
for (int n = 100; n <= 1000; n += 100)
|
||||
{
|
||||
int k = n / 2;
|
||||
Console.WriteLine($"{n} C {k} = {Display(Combination(n, k), 50)}");
|
||||
}
|
||||
}
|
||||
|
||||
private static string Display(BigInteger val, int precision)
|
||||
{
|
||||
string s = val.ToString();
|
||||
// Ensure that we don't try to take a substring longer than what's available.
|
||||
int actualPrecision = Math.Min(precision, s.Length - 1); // Adjusted to ensure it doesn't exceed string length
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
if (s.Length > 1) // Check if the string has more than one character
|
||||
{
|
||||
sb.Append(s.Substring(0, 1));
|
||||
sb.Append(".");
|
||||
sb.Append(s.Substring(1, actualPrecision-1));
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the string is only one digit, no need to insert a decimal point.
|
||||
sb.Append(s);
|
||||
}
|
||||
|
||||
sb.Append(" * 10^");
|
||||
sb.Append(s.Length - 1);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static BigInteger Combination(int n, int k)
|
||||
{
|
||||
// Select value with smallest intermediate results
|
||||
// combination(n, k) = combination(n, n-k)
|
||||
if (n - k < k)
|
||||
{
|
||||
k = n - k;
|
||||
}
|
||||
|
||||
BigInteger result = Permutation(n, k);
|
||||
while (k > 0)
|
||||
{
|
||||
result = result / k;
|
||||
k--;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static BigInteger Permutation(int n, int k)
|
||||
{
|
||||
BigInteger result = BigInteger.One;
|
||||
for (int i = n; i >= n - k + 1; i--)
|
||||
{
|
||||
result = result * i;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
-- Helper function to display results in scientific notation corrected
|
||||
function eshow(x)
|
||||
local e = math.floor(x / math.log(10))
|
||||
local exponentiated = math.exp(x - e * math.log(10))
|
||||
-- Corrected format specifier from %.8Fe%+d to %.8e, and manually constructing the scientific notation if needed
|
||||
return string.format("%.8e", exponentiated) .. "e" .. tostring(e)
|
||||
end
|
||||
|
||||
-- The rest of the functions remain the same
|
||||
|
||||
-- Define the factorial function for permutations
|
||||
function P(n, k)
|
||||
local x = 1
|
||||
for i = n - k + 1, n do
|
||||
x = x * i
|
||||
end
|
||||
return x
|
||||
end
|
||||
|
||||
-- Define the function for big permutations using logarithms
|
||||
function P_big(n, k)
|
||||
local x = 0
|
||||
for i = n - k + 1, n do
|
||||
x = x + math.log(i)
|
||||
end
|
||||
return eshow(x)
|
||||
end
|
||||
|
||||
-- Define the combinations function
|
||||
function C(n, k)
|
||||
local x = 1
|
||||
for i = 1, k do
|
||||
x = x * (n - i + 1) / i
|
||||
end
|
||||
return x
|
||||
end
|
||||
|
||||
-- Define the function for big combinations using logarithms
|
||||
function C_big(n, k)
|
||||
local x = 0
|
||||
for i = 1, k do
|
||||
x = x + math.log(n - i + 1) - math.log(i)
|
||||
end
|
||||
return math.exp(x)
|
||||
end
|
||||
|
||||
-- Function to showcase the calculations
|
||||
function showoff(text, code, fname, ...)
|
||||
local n = {...}
|
||||
print("\nA sample of " .. text .. " from " .. n[1] .. " to " .. n[#n] .. "")
|
||||
for _, v in ipairs(n) do
|
||||
local k = math.floor(v / 3)
|
||||
print(v, fname .. " " .. k .. " = ", code(v, k))
|
||||
end
|
||||
end
|
||||
|
||||
-- Examples of usage
|
||||
showoff("Permutations", P, "P", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
|
||||
showoff("Combinations", C, "C", 10, 20, 30, 40, 50, 60)
|
||||
showoff("Permutations", P_big, "P", 5, 50, 500, 1000, 5000, 15000)
|
||||
showoff("Combinations", C_big, "C", 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000)
|
||||
Loading…
Add table
Add a link
Reference in a new issue