diff options
| author | Abigail <abigail@abigail.be> | 2021-10-26 17:42:52 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-10-26 17:42:52 +0200 |
| commit | 6f22a777308b07dcd433baf9ce525ba9dd95eedb (patch) | |
| tree | 14289945baa80b5866d7c38f20a313dc2ae9df2c /challenge-136/abigail/lua/ch-1.lua | |
| parent | 15deec24c8dc7e7b69a4bb59b8866075207c220e (diff) | |
| download | perlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.tar.gz perlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.tar.bz2 perlweeklychallenge-club-6f22a777308b07dcd433baf9ce525ba9dd95eedb.zip | |
Use the same function to determine whether a number is a power of 2.
We now use the same algorithm (but implemented in different languages)
to determine whether a number is a power of 2. This replaces the
preprocessed powers of 2, and lookup tables.
Diffstat (limited to 'challenge-136/abigail/lua/ch-1.lua')
| -rw-r--r-- | challenge-136/abigail/lua/ch-1.lua | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/challenge-136/abigail/lua/ch-1.lua b/challenge-136/abigail/lua/ch-1.lua index 1c3e149da6..44ea00f251 100644 --- a/challenge-136/abigail/lua/ch-1.lua +++ b/challenge-136/abigail/lua/ch-1.lua @@ -18,22 +18,21 @@ function gcd (a, b) return gcd (b, a % b) end --- --- Precalculate all the relevant powers of 2. Note that in pre 5-3 lua --- integers are doubles, and start losing precision at 2^53, so we go --- up to 2^52. --- -local power_of_2 = {} -local power = 1 -for i = 1, 52 do - power = power * 2 - power_of_2 [power] = 1 +function is_power_of_n (number, n) + if number < 1 then return false end + if number == 1 then return true end + if number % n > 1 then return false end + return (is_power_of_n (number / n, n)) end +function is_power_of_2 (number) + return is_power_of_n (number, 2) +end for line in io . lines () do local _, _, n, m = line : find ("([0-9]+)%s+([0-9]+)") - if power_of_2 [gcd (tonumber (n), tonumber (m))] then + local r = gcd (tonumber (n), tonumber (m)) + if r > 1 and is_power_of_2 (r) then print (1) else print (0) |
