A Holiday Brain Teaser: Mental arithmetic
From The Sunday Times, 3rd August 1958 [link]
“My wife and I have two nieces staying with us”, said the Professor to his Assistant. “Yesterday, at lunch, I noticed that the sum of the ages of the three ladies was exactly twice your age; and, the product of their ages was 2,450. I am talking, by the way, only in terms of whole numbers of years. Can you tell me how old my nieces are?”
After a few moments’ thought, the Assistant said, “You have not given me quite enough information”.
“You are right”, said the Professor. But when I tell you that the luncheon was to celebrate my birthday, and that I was the oldest of the four present, you have all the information you need”.
How old were the Professor, and his wife?
This one of the occasional Holiday Brain Teasers published in The Sunday Times prior to the start of numbered Teasers in 1961. A prize of £5 was offered.
[teaser-1958-08-03] [teaser-unnumbered]



Jim Randell 9:58 am on 27 February 2022 Permalink |
We can look for decompositions of 2450 into three (reasonable) factors, and we are looking for decompositions that give the same even sum (which is twice the assistant’s age).
The assistant (presumably) knows his own age, but we can work it out, because there is only one viable age that gives multiple decompositions.
Knowing the professor is the oldest must allow us to eliminate all but one of the candidate ages. This means the professors age must be more than the largest factor in the first candidate (sorted by largest factor = wife’s age) and not more than the largest factor in the second candidate (otherwise that would become a possibility).
This Python program runs in 47ms.
Run: [ @replit ]
from enigma import (divisors_tuples, div, Record, group, attr, printf) # generate possible ages (nieces = a, b, wife = c, assistant = d) def generate(): for (a, b, c) in divisors_tuples(2450, 3): if c > 120: continue d = div(a + b + c, 2) if d is None: continue yield Record(a=a, b=b, c=c, d=d) # group ages together by assistant's age (d) d = group(generate(), by=attr('d')) # find d values that are ambiguous for (k, vs) in d.items(): if len(vs) < 2: continue # sort the values by wife's age (c) vs.sort(key=attr('c')) # the answer must be the first record r = vs[0] # professor's age must be larger than wife's age in first record, # and not more than wife's age in second record prof = [r.c + 1, vs[1].c] printf("assistant={k} -> wife={r.c} prof={prof} [nieces=({r.a}, {r.b})]")Solution: The professor is 50. His wife is 49.
And the nieces are 5 and 10. The assistant is 32.
LikeLike