// UVa 369 - Combinations #include <iostream> using namespace std; long mult_list[100], div_list[100]; long gcd(long a, long b) { if (b > a) return gcd(b, a); else if (b == 0) return a; else return gcd(b, a % b); } int main() { int n, m; cin >> n >> m; while (n && m) { int mult_lower_bound, div_upper_bound; if (m < n - m) { mult_lower_bound = n - m + 1; div_upper_bound = m; } else { mult_lower_bound = m + 1; div_upper_bound = n - m; } int mult_list_count = 0, div_list_count = 0; for (int i = mult_lower_bound; i <= n; i++) mult_list[mult_list_count++] = i; for (int i = 2; i <= div_upper_bound; i++) div_list[div_list_count++] = i; for (int i = 0; i < mult_list_count; i++) { for (int j = 0; j < div_list_count; j++) { int g = gcd(mult_list[i], div_list[j]); mult_list[i] /= g; div_list[j] /= g; } } long sol = 1; for (int i = 0; i < mult_list_count; i++) sol *= mult_list[i]; cout << n << " things taken " << m << " at a time is " << sol << " exactly." << endl; cin >> n >> m; } }
Sunday, June 7, 2015
UVa 369 - Combinations
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment