36 std::optional<unsigned long long> result;
38 unsigned long long old;
39 unsigned long long f = 1;
42 for(
unsigned long long k = 1; k <= n; ++k)
48 success =
false;
break;
52 if(success) result = f;
58auto nPr(
unsigned long long n,
unsigned long long r = 1)
60 std::optional<unsigned long long> result;
62 unsigned long long old_value;
63 unsigned long long new_value = 1;
66 for(
unsigned long long k = 0; k < r; ++k)
68 old_value = new_value;
71 if(old_value != (new_value / (n-k)))
73 success =
false;
break;
77 if(success) result = new_value;
83auto nCr(
unsigned long long n,
unsigned long long r)
94 std::optional<unsigned long long> result;
98 result = 1;
return result;
101 if ( r > (n-r) ) r = n-r;
108 for(
unsigned long long k = 0; k < r; ++k)
112 old_value = new_value;
115 if(old_value != (new_value / value))
117 success =
false;
break;
122 result = (
unsigned long long)new_value;
128auto nCr_naive(
unsigned long long n,
unsigned long long r)
139 std::optional<unsigned long long> result;
143 result = 1;
return result;
146 if ( r > (n-r) ) r = n-r;
157 if(!r_fact.has_value())
163 result = (
unsigned long long)
npr.value() / r_fact.value();
172 std::cout <<
"\tconst std::vector<unsigned long long> factorial_table\n";
175 for(
unsigned long long n = 0; n < 21; ++n)
196 std::cout <<
"\tconst std::vector<std::vector<unsigned long long>> permutation_table" <<
std::endl;
199 for(
unsigned long long n = 0; n <= limit; ++n)
208 for(
unsigned long long r = 0; r <= n; ++r)
214 std::cout <<
"\t\t\t/* " <<n <<
"_P_" << r <<
" */ ";
233 std::cout <<
"\tconst std::vector<std::vector<unsigned long long>> combination_table" <<
std::endl;
236 for(
unsigned long long n = 0; n <= limit; ++n)
245 for(
unsigned long long r = 0; r <= (n/2) ; ++r)
251 std::cout <<
"\t\t\t/* " <<n <<
"_C_" << r <<
" */ ";
270 std::cout <<
"\tconst std::vector<std::vector<unsigned long long>> combination_table" <<
std::endl;
273 for(
unsigned long long n = 0; n <= limit; ++n)
282 for(
unsigned long long r = 0; r <= (n/2) ; ++r)
288 std::cout <<
"\t\t\t/* " <<n <<
"_C_" << r <<
" */ ";
323 size_t permu = std::atoi(argv[1]);
324 size_t combi = std::atoi(argv[2]);
333 std::cout <<
"\tExample> generate_table.exe 50 100 > permu_combi_table.cxx"<<
std::endl;
void generate_combination_table_naive(unsigned long long limit=100)
int main(int argc, char **argv)
void generate_permutation_table(unsigned long long limit=100)
auto nCr(unsigned long long n, unsigned long long r)
auto factorial(unsigned long long n)
void generate_combination_table(unsigned long long limit=100)
void generate_table(unsigned long long permu=50, unsigned long long combi=100)
auto nCr_naive(unsigned long long n, unsigned long long r)
void generate_factorial_table()
auto nPr(unsigned long long n, unsigned long long r=1)
enable_if_all_in_list_t< types::type_list_t< Type1, Type2 >, integral_list_t, ReturnType > npr(Type1 nn, Type2 rr)
enable_if_all_in_list_t< types::type_list_t< Type1, Type2 >, integral_list_t, ReturnType > ncr(Type1 nn, Type2 rr)