applets/qrpn: Reverted nchoosek implementation and fixed the original (#71)

This commit is contained in:
rlcamp 2022-10-01 12:59:20 -07:00 committed by GitHub
parent 8721122c1f
commit abf70a2871
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 7 deletions

View File

@ -75,16 +75,12 @@ static unsigned long long gcd(unsigned long long a, unsigned long long b) {
return a; return a;
} }
static unsigned long long nchoosek(unsigned long long n, const unsigned long long k) { static unsigned long long nchoosek(const unsigned long long n, const unsigned long long k) {
if (k > n - k) return nchoosek(n, n - k); if (k > n - k) return nchoosek(n, n - k);
unsigned long long n_choose_k = 1; unsigned long long n_choose_k = 1;
for (unsigned long long i = 1; i <= k; i++, n--) { for (size_t kr = 1; kr <= k; kr++)
/* give up */ n_choose_k = (n_choose_k * (n + 1 - kr)) / kr;
if (n_choose_k / i > ULLONG_MAX / n) return 0;
n_choose_k = n_choose_k / i * n + n_choose_k % i * n / i;
}
return n_choose_k; return n_choose_k;
} }