# Enigmatic Code

Programming Enigma Puzzles

## Enigma 1582: Bit tricky

From New Scientist #2747, 13th February 2010 [link]

Joe thought he would test Penny’s ability to manipulate equations this week. So he asked her to find the values of the integers A, B and C in the following equation.

(A.B + 1) ÷ (A.B.C + A + C) = 0.138

What are the values of A, B and C?

Note: If it’s not obvious this is a division: ((A×B) + 1) / ((A×B×C) + A + C) = 0.138

[enigma1582]

### 2 responses to “Enigma 1582: Bit tricky”

1. jimrandell 1 February 2012 at 10:00 am

It’s easy to find a solution to this problem without programming.

The equation can be rewritten as:

(AB + 1) / ((AB + 1)C + A) = 69/500

Clearly (AB + 1) cannot be zero (as it is the numerator for a non-zero fraction), so we can rewrite the equation as:

C + A/(AB+1) = 7 + 17/69

At this point we can equate the integer and fractional parts and it is easy to see a solution:

C=7, A=17, B = (69 – 1) / 17 = 4.

But is it the only solution?

If we consider the case where A and B are both positive integers, then it is clear than 0 < (A / (AB + 1)) < 1, so C can only be 7, leaving:

(A / (AB + 1)) = 17 / 69

So suppose: A = 17n and AB + 1 = 69n for some positive integer n. Substituting for A we get, 17nB + 1 = 69n, which rewriting for n gives:

n = 1 / (69 – 17B)

Which can only have an integer solution of n=1, when 69 – 17B = 1, i.e. B = 68/17 = 4.

So it is indeed the only solution where A, B are positive integers.

Also A cannot be zero. If it is the original equation reduces to: 1/C = 69/500, and if B is zero the equation reduces to 1/(A+C) = 69/500, both of which are impossible to satisfy.

You can then consider the cases where, (A, B < 0), (A > 0), (B > 0) by rewriting the equation in terms of positive -a and -b, as necessary and following reasoning similar to that above to show that no further integer solutions are possible.

Solution: A=17, B=4, C=7.

2. Jim Randell 2 January 2014 at 10:43 am

Here’s a programmatic solution. It tests integer triples (A, B, C) until it finds a solution. It runs in 88ms.

```from itertools import product, count
from enigma import printf

def check(A, B, C):
n = A * B + 1
d = A * B * C + A + C
if 500 * n == 69 * d:
printf("A={A} B={B} C={C}")
return True
return False

def test(A, B, C):
return any(check(*s) for s in product((A, -A), (B, -B), (C, -C)))

def solve():
for s in count(0):
for A in range(0, s):
for B in range(0, s):
C = s - (A + B)
if test(A, B, C):
return

solve()
```

This means I can remove the puzzle from my list of Enigmas that I have not solved programatically.

This site uses Akismet to reduce spam. Learn how your comment data is processed.