Damsel And Suitor
April 21, 2017
Since I’m a better programmer than mathematician, I’ll compute the ages with a computer program:
> (list-of (list x y) (x range 1 100) (y range 1 100) (= (+ (* x x x) (* x y y)) (* 4640 y)) (= (- (* x x y) (* y y y)) (* 5376 (/ 10) x))) ((40 16))
The answer is yes, the suitor is too old. You can run the program at http://ideone.com/jaqKZ8.
If you multiply the two left hand equations and the two right hand equations this reduces to: x^4-y^4 = 2494464 or x^4 = y^4 + 2494464
using this we can re can loop through values of y from 1..100 and look for results for which x is an integer…
Solving it 1779 style: the second equation tells us that that x is a multiple of 5, the first, for a given value of x, is just a quadratic in y with the relevant solution being 2320 – sqrt(5382400 – x^4))/x, Mr Napier’s logarithms tell us that the 4th root of 5382400 is 48.1 or thereabouts, so the oldest the man can be is 45. This doesn’t give a correct value for y, so we try the next one down and find that 40 satisfies both equations and gives 16 for the young lady’s age. Smaller values of x rapidly become increasingly unplausible.
Since both persons are most likely between 10 and 100 years of age…. here’s a simple brute-force way
x = 40
y = 16
Using the same logic as James Curtis-Smith, the minimum value of x and y are as below. These values turn out to be the solution.
It is convenient to substitute x=a*y. Excluding the possibility y=0, we can divide through by y. Both equations now only have y^2, which can be eliminated to give the equation
84*a^4-641*a^2+725=0.
This can be solved for a^2 using the quadratic formula. There are two positive solutions for a. Substituting the rational one (a=5/2) into one of the previous equations gives y^2=256 or y=16 and x=40.
The other solution gives y=40*(1.074276)^(1/4), x=y*(1+8/21)^(1/2) or approximately y=40.7 and x=47.8.
The latter ages are not integer, but not creepy.
Several solutions. Mathematica:
Solve[
{
x^3 + x y^2 == 4640 y,
10 x^2 y - 10 y^3 == 5376 x
},
{x, y}
] ~ Cases ~ {
x -> xi_Integer /; xi > 0,
y -> yi_Integer /; yi > 0
}
C11:
#include <iso646.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
const uint32_t maxAge = 200;
puts("Solutions:");
for (uint32_t x = 1; x < maxAge; ++x) {
for (uint32_t y = 1; y < x; ++y) {
if (x*x*x + x*y*y == 4640*y and
10*x*x*y - 10*y*y*y == 5376*x) {
printf(" [ x = %d y = %d ]\n", x, y);
}
}
}
exit(0);
}
@Jan: nice solution. Here is the original (from “The Ladies’ Diary”) on Google books:
https://books.google.co.uk/books?id=VPQ3AAAAMAAJ&pg=PA45
The second solution, from Mr. Wm. Reynolds, is like yours. The solution from Mr. Tho. Truswell I don’t entirely follow.
I just brute forced it. In C++.
Which gave:
x = 40 & y = 16
Can’t find lisp/scheme which has list-of and range.
@Steve: The
list-of
macro is in my Standard Prelude, and also included in the code on ideone.com.eqa::{(x^3)+(x*(y^2))-(4640*y)}
eqb::{((x^2)*y)-(y^3)+(537.6*x)}
result::{[a list]; a::x; list::y; {:[eqa(a;x)=0; :[eqb(a;x)=0; :[~list?a,x; list::list,,a,x; “”]; “”]; “”]}’1+!100; list}
solve::{[list]; list::[]; {list::result(x;list)}’1+!100; list}
solve()
[[40 16]]
Shorter Klong version:
eqa::{(x^3)+(x*(y^2))-(4640*y)}
eqb::{((x^2)*y)-(y^3)+(537.6*x)}
result::{[a list]; a::x; list::y; {:[eqa(a;x)=0; :[eqb(a;x)=0; list::list,,a,x; “”]; “”]}’1+!100; list}
solve::{[list]; list::[]; {list::result(x;list)}’1+!100; list}
solve()
[[40 16]]
From Cache for Windows (x86-64) 2016.2.1 (Build…)
USER>zl damsel zp
damsel ;New routine
;
; n suitor,damsel
f suitor=1:1:100 d
. f damsel=1:1:100 d
. . i ((suitor**3)+(suitor*(damsel**2))-(4640*damsel))=0 d
. . . s e=((suitor**2)*damsel)
. . . s e2=(damsel**3)
. . . s e3=(537.6*suitor)
. . . i (e-e2-e3)=0 d
. . . . w !,suitor,” “,damsel
q
USER>d ^damsel
40 16