From abf70a2871640024ca0ff336a8bcc61822c42f7d Mon Sep 17 00:00:00 2001 From: rlcamp Date: Sat, 1 Oct 2022 12:59:20 -0700 Subject: [PATCH] applets/qrpn: Reverted nchoosek implementation and fixed the original (#71) --- applets/qrpn/qrpn.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/applets/qrpn/qrpn.c b/applets/qrpn/qrpn.c index fa13ce0c..3133eb62 100644 --- a/applets/qrpn/qrpn.c +++ b/applets/qrpn/qrpn.c @@ -75,16 +75,12 @@ static unsigned long long gcd(unsigned long long a, unsigned long long b) { 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); unsigned long long n_choose_k = 1; - for (unsigned long long i = 1; i <= k; i++, n--) { - /* give up */ - if (n_choose_k / i > ULLONG_MAX / n) return 0; - - n_choose_k = n_choose_k / i * n + n_choose_k % i * n / i; - } + for (size_t kr = 1; kr <= k; kr++) + n_choose_k = (n_choose_k * (n + 1 - kr)) / kr; return n_choose_k; }