Forse ho tralasciato un passaggio che non rende chiarissima la mia soluzione, per cui provo a spiegarla nuovamente.
Chiamiamo S il semiperimetro del rettangolo dato, e A la sua area.
S = a + b;
A = a * b;
Se chiamiamo X un lato del rettangolo da trovare, l'altro suo lato sarà S - X.
Per cui abbiamo che l'area del rettangolo da trovare sarà
X * (S - X)
e siccome questa area deve essere multipla di quella del rettangolo di partenza abbiamo che
X * (S - X) = K * A
per cui
K = X * (S - X) / A
e siccome K deve essere un numero intero
K = int ( X * (S - X) / A)
Il valore minimo che può assumere l'intero K è chiaramente 2, perché un numero per essere multiplo di un altro deve essere almeno il doppio del primo.
Però K potrebbe anche essere: 2, 3, 4, ..., Kmassimo, per cui per uno specifico rettangolo dato dobbiamo stabilire qual è il valore massimo che può assumere K.
Il valore massimo di K si ottiene quando i lati del rettangolo incognito sono uguali, ossia quando il rettangolo è in realtà un quadrato, dove X è uguale a (S - X).
X = S - X
Quindi X = S - X se X vale S/2.
per cui se
K = int ( X * (S - X) / A) e X = S/2
Kmassimo = int ( S/2 * (S - S/2) / A )
ossia
Kmassimo = int ( S/2 * S/2 / A )
ovvero
Kmassimo = int ( S^2 / 4*A )
per cui dal semiperimetro S e l'area A di un rettangolo dato, possiamo trovare il numero N dei rettangoli di area multipla di A che sarà
N = Kmassimo - 1
ossia
N = int ( S^2 / 4*A ) - 1
Quindi se N è maggiore di zero possiamo applicare la formula che segue per tutti i valori di K da 2 a Kmassimo.
X * (S - X) = K * A
X*S - X^2 = K * A
-X^2 + S*X - K * A = 0
per cui risolvendo l'equazione di 2^ grado abbiamo che
X = ( S + sqrt(S^2 - 4 * K * A ) ) / 2
e ovviamente troviamo anche Y che sarà dato da
Y = S - X
In realtà le soluzioni di una equazione di 2^ grado sarebbero due, ma con
X = ( S - sqrt(S^2 - 4 * K * A ) ) / 2
si ottiene lo stesso rettangolo dove i valori dei lati X e Y risultano invertiti.
